Maison > développement back-end > Tutoriel Python > 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

小云云
Libérer: 2018-05-18 14:14:48
original
2742 Les gens l'ont consulté

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目录下
Copier après la connexion
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',
  }
}
Copier après la connexion

2. Créez un "site web" (application) dans le répertoire du projet .

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

3. Configurer la nouvelle application (blog et article)

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

4. Prenez le blog comme exemple, créez un modèle

vim models.py ##blog目录下
Copier après la connexion
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
Copier après la connexion

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'
Copier après la connexion

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这个应用,名字要一致
Copier après la connexion

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
Copier après la connexion
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' ##必须指定这个库
Copier après la connexion
python manage.py makemigrations article ##生成同步计划,虽说改的是blog
python migrate article --database article ##执行计划,虽说改的是blog
Copier après la connexion

8. Commencez à utiliser le test de la base de données , prenez le blog comme exemple :

vim view.py ##blog目录下,添加下列代码
Copier après la connexion
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')
Copier après la connexion
vim urls.py ##blog目录下
Copier après la connexion
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), ##这里配置好
]
Copier après la connexion
vim orm_handle_db.html ##blog/templates目录下
Copier après la connexion

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目录下,添加下面两项
Copier après la connexion
DATABASES_APPS_MAPPING = {
  'blog': 'default',
  'article': 'article',
    }
DATABASE_ROUTERS = ['HelloWorld.database_app_router.DatabaseAppsRouter']
Copier après la connexion
vim database_app_router.py ##配置路由 ,HelloWorld/HelloWorld/目录下。直接粘贴
Copier après la connexion
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
Copier après la connexion

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目录下,添加下方代码
Copier après la connexion
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')
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal