【问题标题】:Pyramid and SqlAlchemy without ORM.Use of Session没有 ORM 的 Pyramid 和 SqlAlchemy。Session 的使用
【发布时间】:2014-07-16 04:25:31
【问题描述】:

这是对this的进一步扩展。

我正在使用没有 ORM 的 sqlalchemy 在金字塔中构建项目。 我发现会话功能很好,因为每次请求结束时我都不必提交。这就是我实现它的方式:

from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    )

from zope.sqlalchemy import ZopeTransactionExtension

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

问题:要只执行 SQL 语句,我需要创建会话吗?

如果是,如何使用 DBSession 执行 sqlstatement。

如果没有,我该如何做同样的事情并处理 session 和 zopeTransactionExtension() 提供的所有功能

【问题讨论】:

    标签: python sqlalchemy pyramid


    【解决方案1】:

    是的,如果您想使用配置了 ZopeTransactionExtension 的会话的“成功提交,失败回滚”行为,您确实需要创建一个会话。

    def my_view(request):
        session = DBSession()
    
        result = session.execute("""SELECT spam, eggs FROM blah WHERE moo='foo'""")
        data = []
        for row in result:
            data.append({
               'spam': row.spam, 
               'eggs': row.eggs
            })
        return data
    

    使用 SQLAlchemy 还可以访问会话使用的底层“引擎”和“连接”,因此您可以在事务块之外运行查询,或者使用特定的数据库连接,但它可能只有用在非常特殊的情况下。

    我认为在任何地方都使用session.execute() 不会有任何可衡量的开销。

    【讨论】:

    • 我试过做 DBSession.execute("""select * from foo""") 并且效果很好。“从 DBSession 创建会话对象”和“直接使用 DBSession”有什么区别?
    猜你喜欢
    • 2020-03-06
    • 2013-06-04
    • 1970-01-01
    • 2019-08-25
    • 2010-09-27
    • 2012-08-16
    • 2016-05-10
    • 2013-02-20
    • 2012-02-05
    相关资源
    最近更新 更多