gpt4 book ai didi

python - 将 SqlAlchemy 集成到 Django 项目中的最佳方式

转载 作者:太空狗 更新时间:2023-10-29 16:54:05 29 4
gpt4 key购买 nike

我将我的 Django 应用程序更改为使用 SQLAlchemy,它现在可以工作了。

但我想知道我应该把这些行放在哪里:

engine = sqlalchemy.create_engine(settings.DATABASE_URL)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()

我问的原因是因为我想在很多地方使用 SQLAlchemy,而且我认为每次我需要使用数据库时调用这三行代码并不正确/强大/写得很好。

我需要SA的地方是:

  • 在我看来,当然
  • 在我写的一些中间件中
  • 在我的模型中。就像在 BlogPost 模型的 get_all_tags 中一样。

我认为正确的做法是获取 session ,如果 session 关闭则重新连接到数据库,或者如果存在则返回当前连接的 session 。

如何在我的 Django 应用程序中正确使用 SQLAlchemy?

感谢您的帮助!

注意:我已经按照本教程将 SA 实现到我的 Django 应用程序中,但是这个教程没有告诉我将这 3 行 ( http://lethain.com/entry/2008/jul/23/replacing-django-s-orm-with-sqlalchemy/) 放在哪里。

最佳答案

对于前两个,engineSession,你可以把它们放在settings.py中;毕竟,它们是配置。

实际上创建 session 需要稍微小心一些,因为 session 本质上是一个“事务”。最简单的做法是在需要时在每个 View 函数中创建它,并在返回之前提交它们。如果你想要比这更神奇一点,或者如果你想/需要在 View 函数之外使用 session ,你应该定义一些 middleware , 像

class MySQLAlchemySessionMiddleware(object):
def process_request(self, request):
request.db_session = settings.Session()

def process_response(self, request, response):
try:
session = request.db_session
except AttributeError:
return response
try:
session.commit()
return response
except:
session.rollback()
raise

def process_exception(self, request, exception):
try:
session = request.db_session
except AttributeError:
return
session.rollback()

然后,每个 View 的请求中都会有一个 db_session 属性,他们可以根据需要使用该属性,并且添加的任何内容都会在响应完成时提交。

不要忘记将中间件添加到 MIDDLEWARE_CLASSES

关于python - 将 SqlAlchemy 集成到 Django 项目中的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6606725/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com