我正在使用 SQLAlchemy Core 运行一些独立的语句。 语句是为了分隔表和无关。因此,我不能将标准 table.insert()
与传入的多个参数字典一起使用。现在,我正在这样做:
sql_conn.execute(query1)
sql_conn.execute(query2)
有什么方法可以一次运行这些,而不需要来回两次到数据库?我在 MySQL 5.7 和 Python 2.7.11 上。
最佳答案
听起来你想要一个 Transaction :
with engine.connect() as sql_conn:
with sql_conn.begin():
sql_conn.execute(query1)
sql_conn.execute(query2)
上面有一个隐含的 sql_conn.commit()
(当使用上下文管理器时),它一次性将更改提交到数据库。如果你想明确地这样做,它是这样完成的:
from sqlalchemy import create_engine
engine = create_engine("postgresql://scott:tiger@localhost/test")
connection = engine.connect()
trans = connection.begin()
connection.execute(text("insert into x (a, b) values (1, 2)"))
trans.commit()
https://docs.sqlalchemy.org/en/14/core/connections.html#basic-usage
虽然这主要用于创建真正的数据库事务,但它对您的用例有一个有用的副作用,它将在 SQLAlchemy 中维护一个“虚拟”事务,请参阅此链接了解更多信息:
Session 使用名为 SessionTransaction 的对象一次跟踪单个“虚拟”事务的状态。然后,该对象利用 Session 对象绑定(bind)到的一个或多个底层引擎,以便根据需要使用 Connection 对象启动真正的连接级事务。
This “virtual” transaction is created automatically when needed, or can alternatively be started using the Session.begin() method. To as great a degree as possible, Python context manager use is supported both at the level of creating Session objects as well as to maintain the scope of the SessionTransaction.
上面描述了 ORM 功能,但链接显示它与核心功能相同。
关于python - 在 SQLAlchemy Core 中执行多个独立语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288420/