Detaillierte Erläuterung der Methode von Django zum Betrieb einer auf ORM basierenden Datenbank

小云云
Freigeben: 2018-05-18 14:14:48
Original
2675 Leute haben es durchsucht

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目录下
Nach dem Login kopieren
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',
  }
}
Nach dem Login kopieren

2. Erstellen Sie eine „Website“ (App) im Projektverzeichnis

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

3. Konfigurieren Sie die neue App (Blog und Artikel)

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

4. Nehmen Sie als Beispiel einen Blog und erstellen Sie ein Modell

vim models.py ##blog目录下
Nach dem Login kopieren
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
Nach dem Login kopieren

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'
Nach dem Login kopieren

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

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

8. Starten Sie den Datenbanktest , nehmen Sie Blog als Beispiel:

vim view.py ##blog目录下,添加下列代码
Nach dem Login kopieren
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')
Nach dem Login kopieren
vim urls.py ##blog目录下
Nach dem Login kopieren
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), ##这里配置好
]
Nach dem Login kopieren
vim orm_handle_db.html ##blog/templates目录下
Nach dem Login kopieren

Datenbankoperationen

Andere Operationen: Sie können sie selbst abfragen Bild unten

9. So betreiben Sie einen weiteren Datenbanktest2

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

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目录下,添加下方代码
Nach dem Login kopieren
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')
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage