[PYTHON] DB-Einstellungen bei Verwendung von Django + SQLAlchemy + Alembic

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.

Dateiorganisation

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

Django-Einstellungen

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

SQL Alchemy-Einstellungen

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

DB-Einstellungen bei Verwendung von Django + SQLAlchemy + Alembic
DEBUG-Einstellungen bei Verwendung von Django
SQLAlchemy + DB-Migration durch Alembic
Verarbeitung von DB-Tabelleneinfügungen mit sqlalchemy
[Django] Einstellung zum Senden von E-Mails mit Postfix
Grundeinstellung von Django
Einstellungen bei Verwendung von Jupyter Notebook unter Proxyserver
Proxy-Einstellungen bei Verwendung von Pip oder Jupyter Notebook
Django + MySQL-Einstellungen
Django URL-Einstellungen
Zusammenfassung bei Verwendung von Fabric
Versuchen Sie es mit Django templates.html
Einstellungen für die Vervollständigung des Django-Befehls
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Hinweise zur Verwendung von Alembic
Beseitigen Sie Fehler, die bei der Verwendung von Django REST Swagger mit Django 3.0 auftreten
So lösen Sie den CSRF-Schutz bei Verwendung von AngularJS mit Django