金字塔和SqlAlchemy没有ORM.Use的会话

时间:2014-07-15 16:40:13

标签: python sqlalchemy pyramid

这是this的进一步扩展。

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

from sqlalchemy.orm import (
    scoped_session,
    sessionmaker,
    )

from zope.sqlalchemy import ZopeTransactionExtension

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

问题:要仅执行SQL语句,我是否需要创建会话?

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

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

1 个答案:

答案 0 :(得分:0)

是的,如果你想使用"成功提交,回滚失败"你需要创建一个会话。使用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,还可以访问基础"引擎"和"连接"由会话使用,因此您可以在事务块之外运行查询,或使用特定的DB连接,但它可能仅在非常特定的情况下才有用。

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