Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung der Methode von Django zum Betrieb einer auf ORM basierenden Datenbank
Dieser Artikel stellt hauptsächlich Djangos Methode zum Betreiben der Datenbank basierend auf ORM vor. Er fasst die damit verbundene Konfiguration, Hinzufügung, Löschung, Änderung und Abfrage von Djangos Verwendung von ORM zum Betreiben der Datenbank in Form von Beispielen zusammen Es kann sich darauf beziehen. Ich hoffe, es kann jedem helfen.
1. Konfigurieren Sie die Datenbank
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. Erstellen Sie eine „Website“ (App) im Projektverzeichnis
django-admin.py startapp blog ##HelloWorld/目录下建立网站app,我建了两个app(blog和article)
3. Konfigurieren Sie die neue App (Blog und Artikel)
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. Nehmen Sie als Beispiel einen Blog und erstellen Sie ein Modell
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. Synchronisieren Sie das Modell mit der Datenbank
python manage.py migrate ## Erstellen Sie Django-Systemtabellen, Sie können sie zum ersten Mal ausführen
python manage.py makemigrations ##Migrationsplan generieren, den generierten Plan jedes Mal ausführen, wenn Sie eine Tabelle oder ein Feld hinzufügen
python manage.py migrate ##Benutzerdefinierte Tabellen synchronisieren
vim models.py #Blog-Verzeichnis, erstellen Sie eine neue Tabelle zum Testen. Sie können versuchen, einige Felder hinzuzufügen oder zu ändern und zu löschen
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. Verwendung mehrerer DatenbankenDie obige Blog-Anwendung entspricht der Testbibliothek in der Datenbank und erstellt dann einen Anwendungsartikel mit der test2-Bibliothek. Die beiden Anwendungen in einem solchen Projekt verwenden unterschiedliche Bibliotheken.
Ich habe die obige Artikelanwendung erstellt und die entsprechende Datenbank im Element DATABASES in Settings.py als test2 konfiguriert. Beachten Sie, dass der Namensartikel konsistent sein muss.
cd-Artikel #Geben Sie das Artikelverzeichnis ein
vim models.py #Unter dem Artikelverzeichnis
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-Artikel ##Generieren Sie einen Synchronisierungsplan
## für Artikel Die Anwendung führt eine Synchronisierung durch und synchronisiert sich mit der Datenbank, die dem Artikel entspricht (Konfiguration in den Einstellungen, entsprechend Test2).
python migrate Article --database Artikel ##Ausführungsplan, Sie müssen --database hinzufügen, um die Bibliothek anzugeben synchronisiert werden
Schritt 6: Mehrere Anwendungen wurden für die Verwendung ihrer eigenen Datenbanken konfiguriert, aber es gibt eine Situation, in der eine Anwendung mehrere Datenbanken verwendet.
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. Starten Sie den Datenbanktest , nehmen Sie Blog als Beispiel:
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目录下
Datenbankoperationen
Andere Operationen: Sie können sie selbst abfragen Bild unten
9. So betreiben Sie einen weiteren Datenbanktest2
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
Nachher Bedienen Sie dazu einfach die Datenbank wie in Schritt 8. Es wird automatisch weitergeleitet, um die entsprechende Datenbank zu finden
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. Für Tabellenverknüpfungsvorgänge in einer einzelnen Datenbank (1-zu-1, viele -zu-1, viele-zu-viele). Sehen Sie sich bei Bedarf das Video an. Ich möchte wirklich keine Fremdschlüssel verwenden
11. Django unterstützt Kwakus Tabellenverknüpfungsoperation nicht, daher müssen Sie eine Methode verwenden, die das ORM umgeht. Siehe zusammenfassendes Dokument
Zusammenfassung: Verwenden Sie ORM für einfache Vorgänge und umgehen Sie ORM für komplexe Vorgänge.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methode von Django zum Betrieb einer auf ORM basierenden Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!