>백엔드 개발 >파이썬 튜토리얼 >Django의 ORM 기반 데이터베이스 운영 방법에 대한 자세한 설명

Django의 ORM 기반 데이터베이스 운영 방법에 대한 자세한 설명

小云云
小云云원래의
2018-05-18 14:14:482727검색

이 글에서는 Django가 ORM을 기반으로 데이터베이스를 운영하는 방식을 주로 소개하며, Django가 ORM을 활용하여 데이터베이스를 운영하는데 관련된 구성, 추가, 삭제, 수정, 쿼리 등을 예시 형태로 정리하고 분석합니다. 그것을 참조하십시오.

1. 데이터베이스 구성

vim settings #HelloWorld/HelloWorld目录下
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql', #mysql数据库中第一个库test
    'NAME': 'test',
    'USER': 'root',
    'PASSWORD': '123456',
    'HOST':'127.0.0.1',
    'PORT':'3306',
  },
  'article': {
    'ENGINE': 'django.db.backends.mysql', # mysql数据库中第二个库test2
    'NAME': 'test2',
    'USER': 'root',
    'PASSWORD': '123456',
    'HOST':'127.0.0.1',
    'PORT':'3306',
  }
}

2. 프로젝트 디렉터리에 "웹사이트"(앱)를 만듭니다

django-admin.py startapp blog ##HelloWorld/目录下建立网站app,我建了两个app(blog和article)

3. 새 앱 구성(블로그 및 기사)

vim settings ##/HelloWorld/HelloWorld目录下
INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'blog',
  'article',
]

4. 블로그를 예로 들어 모델을 생성합니다

vim models.py ##blog目录下
from django.db import models
# Create your models here.
class Teacher(models.Model):
  id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=50)
  class Meta:
    db_table = 'teacher'#默认库test中建立名为teacher的表。字段就是id和name

5. 모델을 데이터베이스에 동기화합니다

pythonmanage.py migration ##Django 시스템 테이블을 생성하고 처음으로 실행합니다
python 관리. py makemigrations ##마이그레이션 생성 계획, 테이블이나 필드를 추가할 때마다 생성된 계획 실행
python Manage.py migration ##사용자 정의 테이블 동기화

vim models.py #블로그 디렉터리에서 다음을 위한 새 테이블 생성 테스트할 때 몇 가지를 추가하거나 수정하고 삭제할 수 있습니다. 필드를 사용해 보세요

class Student(models.Model):
  id = models.IntegerField(primary_key=True)
  name = models.CharField(max_length=50)
  student_number = models.CharField(default="",max_length=50)
  class Meta:
    db_table = 'student'

6. 여러 데이터베이스 사용 위의 블로그 애플리케이션은 데이터베이스의 테스트 라이브러리에 해당하며 test2 라이브러리를 사용하여 애플리케이션 기사를 빌드합니다. 이러한 프로젝트의 두 애플리케이션은 서로 다른 라이브러리를 사용합니다.

위에서 기사 애플리케이션을 생성하고 settings.py의 DATABASES 항목에 해당 데이터베이스를 test2로 구성했습니다. 이름 기사는 일관성이 있어야 합니다.

cd 기사 #기사 디렉토리 입력
vim models.py #기사 디렉토리 아래

from django.db import models
class Author(models.Model):
 id = models.IntegerField(primary_key=True)
 name = models.CharField(max_length=50)
 author_ids = models.CharField(max_length=50)
 class Meta:
   db_table = 'author'
   app_label = 'article' ##对应的article这个应用,名字要一致

python Manage.py makemigrations 기사 ##동기화 계획 생성
##기사 응용 프로그램에 대한 동기화를 실행하고 기사에 동기화(구성은 설정, 해당 테스트2) 해당 데이터베이스에 있습니다.
python 마이그레이션 기사 --database 기사 ##실행 계획, 동기화할 라이브러리를 지정하려면 --database를 추가해야 합니다

7단계: 여러 애플리케이션이 다음을 사용하여 구성되었습니다. 그러나 애플리케이션이 여러 데이터베이스를 사용하는 경우가 있으므로 이 단계에서 구성하세요.

cd blog #进入blog目录下
vim models.py ##blog目录下,在文件中增加一个表,注意后边app_label
class Group(models.Model):
  id = models.IntegerField(primary_key=True)
  group_name = models.CharField(max_length=50)
  class Meta:
    db_table = 'group'
    app_label = 'article' ##必须指定这个库
python manage.py makemigrations article ##生成同步计划,虽说改的是blog
python migrate article --database article ##执行计划,虽说改的是blog

8. 데이터베이스 테스트 시작, 블로그를 예로 들어보세요:

vim view.py ##blog目录下,添加下列代码
from blog.models import Teacher
def orm_handle_db(request):
  test1 = Teacher(id=1,name='runoob',teacher_number='10') ##定义数据
  test1.save() ##保存
  return render_to_response('orm_handle_db.html')
vim urls.py ##blog目录下
from django.conf.urls import url
from blog import views
urlpatterns = [
  url(r'^hello/$', views.hello),
  url(r'^search/$', views.search),
  url(r'^post_search/$', views.post_search),
  url(r'^search_submit$', views.search_submit),
  url(r'^post_search_submit$', views.post_search_submit),
  url(r'^db_handle/$', views.db_handle),
  url(r'^orm_handle_db/$', views.orm_handle_db), ##这里配置好
]
vim orm_handle_db.html ##blog/templates目录下

데이터베이스 작업

기타 작업: 추가, 삭제, 수정, 쿼리 및 정렬 그룹화 작업은 직접 쿼리할 수 있습니다. 아래 이미지로

9. 다른 데이터베이스 운영 방법 test2

vim settings.py ##HelloWorld/HelloWorld目录下,添加下面两项
DATABASES_APPS_MAPPING = {
  'blog': 'default',
  'article': 'article',
    }
DATABASE_ROUTERS = ['HelloWorld.database_app_router.DatabaseAppsRouter']
vim database_app_router.py ##配置路由 ,HelloWorld/HelloWorld/目录下。直接粘贴
from django.conf import settings
class DatabaseAppsRouter(object):
def db_for_read(self, model, **hints):
app_label = model._meta.app_label
if app_label in settings.DATABASES_APPS_MAPPING:
res = settings.DATABASES_APPS_MAPPING[app_label]
print(res)
return res
return None
def db_for_write(self, model, **hints):
app_label = model._meta.app_label
if app_label in settings.DATABASES_APPS_MAPPING:
return settings.DATABASES_APPS_MAPPING[app_label]
return None
def allow_relation(self, obj1, obj2, **hints):
db_obj1 = settings.DATABASES_APPS_MAPPING.get(obj1._mata.app_label)
db_obj2 = settings.DATABASES_APPS_MAPPING.get(obj2._mata.app_label)
if db_obj1 and db_obj2:
if db_obj1 == db_obj2:
return True
else:
return False
return None
def db_for_migrate(self, db, app_label, model_name=None, **hints):
if db in settings.DATABASES_APPS_MAPPING.values():
return settings.DATABASES_APPS_MAPPING.get(app_label) == db
elif app_label in settings.DATABASES_APPS_MAPPING:
return False
return None

그러면 8단계와 같이 데이터베이스를 운영하면 해당 데이터베이스가 자동으로 라우팅됩니다

vim views.py #blog目录下,添加下方代码
from blog.models import Teacher,Group##这是第8步没有的
def orm_handle_db(request):
  test1 = Teacher(id=1,name='runoob',teacher_number='10')
  test2 = Group(id=1,group_name='runoob') ##这是第8步没有的
  test1.save()
  test2.save()##这是第8步没有的
  return render_to_response('orm_handle_db.html')

10. 단일 라이브러리(1쌍 1, 다대1, 다대다). 필요한 경우 비디오를 참조하십시오. 정말 외래키를 사용하고 싶지 않아요

11. Django는 Kwaku의 테이블 링크 연산을 지원하지 않기 때문에 ORM을 우회하는 방법을 사용해야 합니다. 요약 문서 보기

요약: 간단한 작업에는 ORM을 사용하고, 복잡한 작업에는 ORM을 우회하세요.

위 내용은 Django의 ORM 기반 데이터베이스 운영 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.