Djangos Standard-ORM kann schnell sein und Sie möchten möglicherweise SQL Alchemy verwenden. Die SQLAlchemy-Migration ist jedoch auch nicht sehr gut, daher möchte ich stattdessen Alembic verwenden.
Da jedes Modul ein unabhängiges Modul ist, wird jede Datenbank auf andere Weise festgelegt. Da es schwierig ist, sie separat zu schreiben, beziehen sich SQL Alchemy und Alembic auf die Django-Einstellungen.
Nehmen Sie zunächst die folgende Dateistruktur an.
myProject/ +--- manage.py
+--- alembic/ ---+-- env.py
| +---andere
+--- alembic.ini
+--- myProject/ -+-- settings.py
| +---andere
+--- myApp/ -----+-- models.py
+---andere
Belassen Sie dies bei der Standardeinstellungsmethode. Es soll MySQL verwenden.
settings.py
# Database
DATABASE_ENGINE = 'mysql'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxxx', #Angemessen
'USER': 'xxxx', #Angemessen
'PASSWORD': 'xxxx', #Angemessen
'HOST': 'xxxx', #Angemessen
'PORT': 'xxxx', #Angemessen
'OPTIONS': {}, #Im Bedarfsfall
}
}
SQLALCHEMY_OPTIONS = {} #Wenn Sie SQLAlchemy konfigurieren müssen
sqlalchemy muss beim Erstellen einer Sitzung die Datenbank festlegen. Wenn Sie in myProject / myProject eine Datei mit dem Namen db.py erstellen und eine Sitzung erstellen müssen, laden Sie diese Datei, damit Sie eine Sitzung erstellen können.
myProject/myProject/db.py
# -*- coding: utf-8 -*-
"""db session and util."""
from myProject import settings
import sqlalchemy.orm
from sqlalchemy.engine.url import URL
def db_url():
db_settings = settings.DATABASES['default']
url = URL(drivername=settings.DATABASE_ENGINE,
database=db_settings['NAME'],
username=db_settings['USER'],
password=db_settings['PASSWORD'],
host=db_settings['HOST'],
port=db_settings['PORT'] or None,
query = getattr(db_settings, 'OPTIONS', {})
)
return url
def create_engine():
try:
url = db_url()
except:
raise
options = getattr(settings.DATABASES['default'], 'SQLALCHEMY_OPTIONS', {})
engine = sqlalchemy.create_engine(url, **options)
return engine
def make_session():
Session = sqlalchemy.orm.sessionmaker(bind=create_engine())
session = Session()
return session
Alembic
Grundsätzlich werden die alembic DB-Einstellungen in alembic.ini festgelegt. Dies ist jedoch unpraktisch, da in der Datei settings.py nicht auf sie verwiesen wird, sodass sie in alembic / env.py dynamisch festgelegt wird.
env.py
###Auszug
import os
import sys
from alembic import context
#Wenn diese Datei unverändert bleibt, können die Einstellungen nicht gelesen werden. Führen Sie sie daher über den Pfad.
path = os.path.join(os.path.dirname(__file__), '../')
sys.path.append(path)
from user import models
from myProject.db import db_url
config = context.config
#URL festlegen
url = str(db_url())
config.set_main_option("sqlalchemy.url", url)
Recommended Posts