这是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()提供的所有功能
答案 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()
都会产生任何可衡量的开销。