Правильная настройка Django с sqlAlchemy?

Я бороздил интернет в течение 3-5 дней в поисках правильного ответа на это решение. Я вижу много кода для Flask, но ни одного для Django, чтобы ответить на мой вопрос. Возможно, это потому, что Django имеет встроенный ORM, и если использование SqlAlchemy с Django будет считаться странным, я бы хотел, чтобы об этом знали. Для меня лично это был бы ответ с высоким рейтингом.

Вопрос в следующем: какой лучший способ (или даже один способ) настроить Django с sqlAlchemy?

Я хочу:

  • Храните инициализацию базы данных в одном файле если и только если это то, что вы делаете в sqlAlchemy, чтобы избежать ошибок.
  • Хранить модели моей базы данных только в одном файле, экспортируя их, а затем импортируя в файл(ы), где они мне нужны.
  • Я не хочу использовать Aldjemy, как показано здесь. Я делаю это, чтобы изучить Django
  • .

Пример идеальной структуры файла, вот как я думаю, она должна выглядеть:

..mysite
....someAppName
......db
......-db.py
......-models.py
....__init__.py
....admin.py
....apps.py
....models.py <-- maybe models should go here, but where to export the db connection from?
....tests.py
....urls.py
....views.py

В настоящее время в db/db.py у меня есть:

from sqlalchemy import Table, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import event

import sqlalchemy as db

engine = db.create_engine('sqlite:///census.sqlite')
connection = engine.connect()

Base = declarative_base()

class Viewer(Base):
    __tablename__ = 'viewer'
    id = Column(Integer, primary_key=True)


class Session(Base):
    __tablename__ = "session"
    session_id = Column(Integer, primary_key=True),
    user_id = Column(ForeignKey("user_account.user_id")),
    ip = Column(String(30)),
    height = Column(Integer)
    width = Column(Integer)

и я хочу, чтобы этот код правильно экспортировался в другие файлы, чтобы я мог использовать его там без дублирования кода.

Например, в views.py я хотел бы иметь возможность сделать:

@csrf_exempt
def create_user(request):
    # Create a user to hold sessions.
    user_id = randint(0, 100000)
    print(user_table)
    stmt = insert(user_table).values(user_id=user_id)
    with engine.connect() as conn:
        userData.create_all(engine)  # can take this out after I export db correctly
        result = conn.execute(stmt)
        conn.commit()
    return HttpResponse("user created! {}".format(result.inserted_primary_key))

Но версия, которая использует declarative_base() модели.

Надеюсь, что было понятно, спасибо всем, кто прочитал или помог.

P.S. Я понимаю, что вопрос о "лучшем способе" может быть немного субъективным, в идеале ответ здесь является руководством для будущих пользователей Django + sqlAlchemy.

Вернуться на верх