我发现自己在sqlalchemy中重复了很多这样的事情,我想知道处理它的最佳方法是什么?
try:
#do some database query
db_session.commit()
except: #some exception handling
db_session.rollback()
从我的工作代码(会话注册表包装器的一种方法)来看,这是正确的。
它是这样使用的:
# dblink is an object that knows how to connect to the database
with dblink.CommittingSession() as session:
session.add(...)
# do anything else.
# at this point, session.commit() has been called.
要么:
try:
with dblink.CommittingSession() as session:
session.add(...)
except ...:
# at this point, session.rollback has been called.
log.error('We failed!')
实现:
from contextlib import contextmanager
class DbLink(object):
"""This class knows how to connect to the database."""
# ...
# Basically we wrap a sqlalchemy.orm.sessionmaker value here, in session_registry.
# You might want to create sessions differently.
@contextmanager
def CommittingSession(self, **kwargs):
"""Creates a session, commits at the end, rolls back on exception, removes.
Args:
**kwargs: optional; supplied to session_registry while asking
to construct a session (mostly for testing).
Yields:
a session object. The session will .commit() when a `with CommittingSession()`
statement terminates normally, or .rollback() on an exception.
"""
try:
session = self.session_registry(**kwargs) # this gives us a session.
# transaction has already begun here, so no explicit .begin().
yield session
except:
session.rollback()
raise
else:
session.commit()
finally:
# Note: close() unbinds model objects, but keeps the DB connection.
session.close()
self.session_registry.remove()
问题内容: 如何设置初始化我的Flask应用程序以将Flask-SQLAlchemy设置为自动提交模式,除非我明确地不使用事务? 会话“ 开始通信后即开始数据库事务 ”。这是否会影响Postgres的难度比MySQL? 通过Instagram, 自动提交模式;在这种模式下,Psycopg2不会对任何查询发出BEGIN / COMMIT;相反,每个查询都在其自己的单语句事务中运行。这对于不需要事务语
HibernateTemplate api说: …当在事务之外使用时,它能够退回到“自动提交”风格的行为 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate3/HibernateTemplate.html 有人能指出发生这种情况的地方吗 https://github.com/
问题内容: 我已阅读flask-sqlalchemy或sqlalchemy,它们建议将flask-sqlalchemy与flask一起使用。我想遵循这种方法。 但是,我有一个为命令行脚本编写的现有模型,该模型基于sqlalchemy的declarative_base,例如, 我希望仍然可以在此模型中使用命令行脚本,但也希望围绕该模型构建Web应用程序。 有没有办法扩展现有模型,以获得使用flask
我想在3个表中插入记录。代码如下。 地址的密钥是aID,客户的密钥是cID。它们是自动增量。在顾客中,有一个外键受地址的aID约束。HomeCu的外键cID受客户的cID约束。所以我想插入地址,客户,HomeCu顺序,在此期间,我必须得到密钥而不做提交。我使用flush()来获取密钥,但在提交操作中失败。为什么在提交操作中,像电子邮件、密码这样的值变成无,但打印语句做得很好?我已经为此挣扎了几个小
问题内容: 在此表模式中: 我有一个父母,假设这张桌子: 父母是名为“ singapore”* 的 国家 对象。可以有多个嵌套的对象,是孩子们 盛港 随便怎么样都 盛港 是孩子 新加坡 。 *** 因此,一条等级链可能看起来像a-> b->盛港->新加坡 ->意思 是 如何获得所有以父级为新加坡的位置对象,包括父级对象(新加坡)?(请在SQLAlchemy中)。谢谢! 问题答案: SA文档:Que
我们正在尝试从Spring 2.5.2升级到4.0.5. RELEASE,但发现Spring的事务管理不再起作用。 在我们的生产应用程序中,所有数据库操作都通过一个标有@Transactional注释的Spring bean(使用默认设置)。几年来,这一直按预期工作,如果在事务边界内抛出RuntimeException,就会发生回滚。然而,当我们升级到Spring 4.0.5时。释放时,它的作用相