Maison  >  Article  >  développement back-end  >  Explication détaillée de la méthode de fonctionnement de la base de données de Django basée sur ORM

Explication détaillée de la méthode de fonctionnement de la base de données de Django basée sur ORM

小云云
小云云original
2018-05-18 14:14:482616parcourir

Cet article présente principalement la méthode d'exploitation de la base de données par Django basée sur ORM. Il résume et analyse la configuration, l'ajout, la suppression, la modification et la requête associés à l'utilisation de l'ORM par Django pour faire fonctionner la base de données sous forme d'exemples. il peut s'y référer. J'espère que cela pourra aider tout le monde.

1. Configurez la base de données

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. Créez un "site web" (application) dans le répertoire du projet .

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

3. Configurer la nouvelle application (blog et article)

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. Prenez le blog comme exemple, créez un modèle

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 Synchronisez le modèle avec la base de données

python manage.py. migrate ## Créez des tables système Django, vous pouvez l'exécuter pour la première fois
python manage.py makemigrations ##Générer un plan de migration, exécutez le plan généré à chaque fois que vous ajoutez une table ou un champ
python manage.py migrate ##Synchronisez les tables définies par l'utilisateur

répertoire vim models.py #blog, créez une nouvelle table pour tester, vous pouvez essayer d'ajouter ou de modifier et de supprimer quelques champs

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. Utilisation de plusieurs bases de données, L'application de blog ci-dessus correspond à la bibliothèque de test dans la base de données, puis créez un article d'application en utilisant la bibliothèque test2. Les deux applications d'un tel projet utilisent des bibliothèques différentes.

J'ai créé l'application d'article ci-dessus et configuré la base de données correspondante dans l'élément DATABASES de settings.py pour qu'elle soit test2. Notez que le nom de l'article doit être cohérent.

article cd #Entrez dans le répertoire de l'article
vim models.py #Sous le répertoire de l'article

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这个应用,名字要一致

article python manage.py makemigrations ##Générer un plan de synchronisation
## pour l'article L'application effectue la synchronisation et se synchronise avec la base de données correspondant à l'article (configuration dans les paramètres, correspondant à test2).
python migrate article --database article ##Plan d'exécution, vous devez ajouter --database pour spécifier la bibliothèque à être synchronisé

7. Étape 6 : Plusieurs applications ont été configurées pour utiliser leurs propres bases de données, mais il existe une situation où une application utilise plusieurs bases de données.

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. Commencez à utiliser le test de la base de données , prenez le blog comme exemple :

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目录下

Opérations de base de données

Autres opérations : ajouter, supprimer, modifier, vérifier et trier et regrouper les opérations. Vous pouvez les interroger par vous-même. image ci-dessous

9. Comment faire fonctionner un autre test de base de données2

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

Après cela, il suffit d'exploiter la base de données comme à l'étape 8. Il sera automatiquement acheminé pour trouver la base de données correspondante

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. Pour les opérations de lien de table dans une seule base de données (1 à 1, plusieurs -à-1, plusieurs à plusieurs). Voir la vidéo si nécessaire. Je ne veux vraiment pas utiliser de clés étrangères

11. Django ne prend pas en charge l'opération de lien de table de Kwaku, vous devez donc utiliser une méthode qui contourne l'ORM. Voir le document récapitulatif

Résumé : Utilisez ORM pour les opérations simples et contournez ORM pour les opérations complexes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn