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

标签 python mysql sqlalchemy

我正在使用 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, 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/

相关文章:

php - 在没有注册帐户的情况下识别应用程序的用户

python - SQLAlchemy:聚合后如何过滤

python - sqlalchemy/google cloud sql api 需要与 google appengine 一起安装什么?

python测试框架

python - 使用 bool 掩码有效地将 numpy 数组的元素归零

Python 拥有漂亮的 UI + 玻璃效果

python - 如果当前值大于现有最小值,则更新 mysql 中的表,否则忽略该更新

php - 用于检查相互值的 MySQL 查询

PHP - Strlen 的行为很奇怪,同样的事情 - 不同的结果,大声笑数字?

python - 如何编写依赖于子关系列的混合属性?