Правильная настройка 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.