Latest web development tutorials

장고 모델

PostgreSQL을, MySQL은, SQLite는 오라클 : 장고를 포함하는 데이터베이스 지원의 좋은 다양한 제공합니다.

장고는 이러한 데이터베이스에 대한 통합 API 호출을 제공합니다. 우리는 비즈니스 요구에 따라 서로 다른 데이터베이스를 선택할 수 있습니다.

MySQL은 가장 일반적으로 사용되는 웹 애플리케이션 데이터베이스이다. 우리가 예를 들어 MySQL을 것이 장에서는 도입된다. 당신은 사이트 수 MySQL의 튜토리얼은 더 MySQL의 기본을 배울 수 있습니다.


데이터베이스 구성

우리는 프로젝트에 대한 settings.py 파일의 데이터베이스 구성 항목을 찾아, 그 내용은 다음과 같이 개정한다 :

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test123',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

위에서 언급 한 데이터베이스 이름과 동일한 MySQL 데이터베이스 및 사용자 설정에 해당 사용자 정보가 포함되어 있습니다. 장고는이 설정에 따르면, MySQL 데이터베이스와 해당 사용자를 연결합니다.


정의 모델

APP 만들기

장고는 모델을 사용하려는 경우, 우리는 응용 프로그램을 작성해야합니다. 우리는 인앱 TestModel을 만들려면 다음 명령을 사용합니다 :

python manage.py startapp TestModel

다음 디렉토리 구조는 다음과 같습니다

HelloWorld
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py

다음과 같이 우리는 TestModel / models.py 파일을 수정 :

# models.py
from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=20)

클래스 이름 위의 데이터베이스 테이블의 이름을 나타내며, models.Model을 상속 필드 내부 클래스는 CharField (VARCHAR에 해당)하여 DateField (해당하는 날짜), MAX_LENGTH하여 데이터 테이블 필드 (이름), 데이터 형식을 나타냅니다 매개 변수 길이를 정의했다.

다음과 같이 다음, INSTALLED_APPS에게 settings.py에서이 하나를 찾을 수 있습니다 :

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel',               # 添加此项
)

명령 줄 파이썬 manage.py의 syncdb를 실행 워드 라인 페이지의 "테이블 만들기를 ..."하고 데이터 테이블이 생성되었습니다.

Creating tables ...
……
Creating table TestModel_test  #我们自定义的表
……

구성 테이블 구조 : 앱 이름 _ 클래스 이름 (예 : TestModel_test).

참고 : 우리는 모델 테이블에 기본 키를 설정할 필요는 없지만, 장고는 자동으로 기본 키로 ID를 추가 있지만.


데이터베이스 작업

다음에 우리는 testdb.py 파일을 HelloWorld 디렉토리를 추가하고 urls.py 수정 :

from django.conf.urls import *
from HelloWorld.view import hello
from HelloWorld.testdb import testdb

urlpatterns = patterns("",
        ('^hello/$', hello),
        ('^testdb/$', testdb),
)

데이터 추가

당신이 기능은 SQL INSERT의 등가를 저장 수행 데이터를 다음 객체를 생성하고 필요에 추가 :

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	test1 = Test(name='w3cschool.cc')
	test1.save()
	return HttpResponse("<p>数据添加成功!</p>")

당신은 데이터 액세스 http://192.168.45.3:8000/testdb/가 프롬프트 성공을 추가 볼 수 있습니다.

데이터 가져 오기

다음 코드와 같이 장고, 데이터베이스의 내용을 얻을 수있는 몇 가지 방법을 제공합니다 :

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 初始化
	response = ""
	response1 = ""
	
	
	# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
	list = Test.objects.all()
		
	# filter相当于SQL中的WHERE,可设置条件过滤结果
	response2 = Test.objects.filter(id=1) 
	
	# 获取单个对象
	response3 = Test.objects.get(id=1) 
	
	# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
	Test.objects.order_by('name')[0:2]
	
	#数据排序
	Test.objects.order_by("id")
	
	# 上面的方法可以连锁使用
	Test.objects.filter(name="w3cschool.cc").order_by("id")
	
	# 输出所有数据
	for var in list:
		response1 += var.name + " "
	response = response1
	return HttpResponse("<p>" + response + "</p>")

출력는 다음과 같습니다 :

데이터 업데이트

당신은 () 또는 업데이트 () 저장 사용하여 데이터를 수정할 수 있습니다 :

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
	test1 = Test.objects.get(id=1)
	test1.name = 'w3cschool本教程'
	test1.save()
	
	# 另外一种方式
	#Test.objects.filter(id=1).update(name='w3cschool本教程')
	
	# 修改所有的列
	# Test.objects.all().update(name='w3cschool本教程')
	
	return HttpResponse("<p>修改成功</p>")

데이터를 삭제

데이터베이스에서 삭제 된 개체는 단순히 객체의 삭제 () 메서드를 호출 :

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 删除id=1的数据
	test1 = Test.objects.get(id=1)
	test1.delete()
	
	# 另外一种方式
	# Test.objects.filter(id=1).delete()
	
	# 删除所有数据
	# Test.objects.all().delete()
	
	return HttpResponse("<p>删除成功</p>")