gpt4 book ai didi

python - 在 SQLAlchemy Core 中执行多个独立语句?

转载 作者:IT老高 更新时间:2023-10-29 00:12:41 26 4
gpt4 key购买 nike

我正在使用 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 中维护一个“虚拟”事务,请参阅此链接了解更多信息:

https://docs.sqlalchemy.org/en/14/orm/session_transaction.html#session-level-vs-engine-level-transaction-control

Session 使用名为 SessionTransaction 的对象一次跟踪单个“虚拟”事务的状态。然后,该对象利用 Session 对象绑定(bind)到的一个或多个底层引擎,以便根据需要使用 Connection 对象启动真正的连接级事务。

This “virtual” transaction is created automatically when needed, orcan alternatively be started using the Session.begin() method. To asgreat a degree as possible, Python context manager use is supportedboth at the level of creating Session objects as well as to maintainthe scope of the SessionTransaction.

上面描述了 ORM 功能,但链接显示它与核心功能相同。

关于python - 在 SQLAlchemy Core 中执行多个独立语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com