L'ORM standard de Django peut être rapide et vous voudrez peut-être utiliser SQL Alchemy. Cependant, la migration de SQLAlchemy n'est pas non plus très bonne, donc j'aimerais utiliser Alembic à la place.
Comme chacun est un module indépendant, chaque DB est défini de manière différente. Comme il est difficile de les écrire séparément, SQL Alchemy et Alembic se réfèrent aux paramètres Django.
Tout d'abord, supposons la structure de fichiers suivante.
myProject/ +--- manage.py
+--- alembic/ ---+-- env.py
| +---autre
+--- alembic.ini
+--- myProject/ -+-- settings.py
| +---autre
+--- myApp/ -----+-- models.py
+---autre
Laissez ceci tel quel est la méthode de réglage standard. Il est censé utiliser mysql.
settings.py
# Database
DATABASE_ENGINE = 'mysql'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxxx', #Approprié
'USER': 'xxxx', #Approprié
'PASSWORD': 'xxxx', #Approprié
'HOST': 'xxxx', #Approprié
'PORT': 'xxxx', #Approprié
'OPTIONS': {}, #Si nécessaire
}
}
SQLALCHEMY_OPTIONS = {} #Si vous devez configurer SQLAlchemy
sqlalchemy doit définir DB lors de la création d'une session. Si vous devez créer un fichier appelé db.py dans myProject / myProject et créer une session, chargez ce fichier afin de pouvoir créer une session.
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
Fondamentalement, les paramètres de la base de données d'alambic sont définis à partir d'alembic.ini. Cependant, cela n'est pas pratique car il n'est pas référencé à partir du fichier settings.py tel quel, il est donc défini dynamiquement dans alembic / env.py.
env.py
###Extrait
import os
import sys
from alembic import context
#Si ce fichier est laissé tel quel, les paramètres ne peuvent pas être lus, alors passez-le par le chemin.
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
#Définir l'URL
url = str(db_url())
config.set_main_option("sqlalchemy.url", url)
Recommended Posts