장고 모델
Django는 PostgreSQL, MySQL, SQLite 및 Oracle을 포함한 다양한 데이터베이스에 대한 우수한 지원을 제공합니다.
Django는 이러한 데이터베이스에 대한 통합 호출 API를 제공합니다. 비즈니스 요구에 따라 다양한 데이터베이스를 선택할 수 있습니다.
MySQL은 웹 애플리케이션에서 가장 일반적으로 사용되는 데이터베이스입니다. 이번 장에서는 MySQL을 예로 들어 소개하겠습니다. 이 사이트에서 MySQL 튜토리얼을 살펴볼 수 있습니다. MySQL의 기본 사항에 대해 자세히 알아보세요.
데이터베이스 구성
프로젝트의 settings.py 파일에서 DATABASES 구성 항목을 찾아 해당 정보를 다음과 같이 수정합니다.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'test', 'PASSWORD': 'test123', 'HOST':'localhost', 'PORT':'3306', } }
위에는 데이터베이스 이름과 사용자 정보가 포함되어 있으며 이는 해당 데이터베이스와 동일하며 MySQL의 사용자 설정. Django는 이 설정을 기반으로 MySQL의 해당 데이터베이스와 사용자에 연결합니다.
모델 정의
APP 만들기
Django에서는 모델을 사용하려면 앱을 만들어야 한다고 규정하고 있습니다. 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)
위 클래스 이름은 데이터베이스를 나타냅니다. 모델을 상속하고 클래스의 필드는 데이터 테이블의 필드(이름)를 나타내며 데이터 유형은 CharField(varchar와 동일), DateField(datetime과 동일)입니다. max_length 매개변수는 길이를 제한합니다.
다음으로 settings.py에서 INSTALLED_APPS 항목을 다음과 같이 찾습니다.
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'TestModel', # 添加此项 )
명령줄에서 python Manage.py syncdb를 실행하면 "Creating table..."이라는 문구가 몇 줄 표시되면 데이터 테이블이 생성됩니다. .
Creating tables ... …… Creating table TestModel_test #我们自定义的表 ……
테이블 이름의 구조는 앱 이름_클래스 이름(예: TestModel_test)입니다.
참고: 모델의 테이블에 기본 키를 설정하지 않더라도 Django는 자동으로 기본 키로 ID를 추가합니다.
데이터베이스 작업
다음으로 HelloWorld 디렉터리에 testdb.py 파일을 추가하고 urls.py를 수정합니다.
from django.conf.urls import * from HelloWorld.view import hello from HelloWorld.testdb import testdb urlpatterns = patterns("", ('^hello/$', hello), ('^testdb/$', testdb), )
Add data
데이터를 추가하려면 먼저 객체를 생성한 다음 저장 기능을 실행해야 합니다. 이는 다음과 같습니다. 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/를 방문하면 데이터가 성공적으로 추가되었다는 메시지를 볼 수 있습니다.
Get data
Django는 다음 코드와 같이 데이터베이스의 내용을 가져오는 다양한 방법을 제공합니다.
# -*- 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>")
출력 결과는 다음과 같습니다.
Update data
데이터를 수정하려면, save() 또는 update( )를 사용할 수 있습니다.
# -*- 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 = 'w3cschoolphp中文网' test1.save() # 另外一种方式 #Test.objects.filter(id=1).update(name='w3cschoolphp中文网') # 修改所有的列 # Test.objects.all().update(name='w3cschoolphp中文网') return HttpResponse("<p>修改成功</p>")
데이터 삭제
데이터베이스에서 개체를 삭제하려면 해당 개체의 delete() 메서드를 호출하세요.
# -*- 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>")