gpt4 book ai didi

python - 为 View 可调用项设置 sqlalchemy 连接的推荐方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:40:34 25 4
gpt4 key购买 nike

我正在使用 sqlalchemy 表达式语言的符号和连接池来创建与持久层通信的 dao 对象。我想获得一些关于我应该如何设置元数据和引擎的意见,以便它们可用于应用程序 View 可调用项。根据 sqlalchemy 的文档 http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html ,它们通常被绑定(bind)并声明为全局的,但是我认为这种方法或单例方法都不是好主意。任何想法将不胜感激...

这是我的 __init__.py 文件在我的项目目录中的样子:

from pyramid.config import Configurator
from sqlalchemy import engine_from_config, MetaData, create_engine
from pyramid_beaker import session_factory_from_settings

db_url = 'postgresql://user:password@localhost/dbname'
engine = create_engine(db_url)
meta = MetaData()

def main(global_config, **settings):
meta.bind = engine
.
.
.
[other configuration settings]

最佳答案

Pyramid 文档包括 tutorial on integrating Pyramid with SQLAlchemy .

有两个特殊的包将 SQLAlchemy 事务和 session 管理与 Pyramid 集成在一起,pyramid_tmzope.sqlalchemy .这些一起负责您的 session :

from sqlalchemy import engine_from_config

from .models import DBSession

def main(global_config, **settings):
"""This function returns a Pyramid WSGI application."""

engine = engine_from_config(settings, 'sqlalchemy.')
DBSession.configure(bind=engine)
# Configuration setup

这里我们从您的.ini 配置文件中获取配置设置;在 models.py 中:

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import (
scoped_session,
sessionmaker,
)

from zope.sqlalchemy import ZopeTransactionExtension

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()

class YourModel(Base):
# Define your model

注意 scoped_session 的使用在那里,使用事务扩展与 Pyramid 集成。

然后在 View 中,您需要做的就是使用 DBSession session 工厂来获取您的 session :

from pyramid.view import view_config
from .models import (
DBSession,
YourModel,
)

@view_config(...)
def aview(request):
result = DBSession.query(YourModel).filter(...).first()

提交和回滚将与请求集成;例如,在 2xx 和 3xx 时提交,在异常时回滚。

关于python - 为 View 可调用项设置 sqlalchemy 连接的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11912890/

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