![](/img/trans.png)
[英]sqlalchemy core: Execute Multiple Statements gives StatementError, memoryview error
[英]Execute multiple independent statements in SQLAlchemy Core?
我正在使用 SQLAlchemy Core 来运行一些独立的语句。 语句是分开的表和不相关的。 因此,我不能将标准table.insert()
与传入的多个参数字典一起使用。现在,我正在这样做:
sql_conn.execute(query1)
sql_conn.execute(query2)
有什么方法可以一次性运行这些,而不是需要两次来回访问数据库? 我在 MySQL 5.7 和 Python 2.7.11 上。
一次运行两个查询既不明智也不实际。
让黑客以另一种方式通过“SQL注入”做出讨厌的事情是不明智的。
另一方面,它是可能的,但不一定是实用的。 您将创建一个存储过程,其中包含任意数量的相关(或不相关)查询。 然后CALL
那个程序。 有些事情可能会使它变得不切实际:
如果您与MySQL服务器在同一台计算机上,则往返延迟是微不足道的 。 即使两台服务器位于同一数据中心,通常也可以忽略它。 当客户端和服务器长距离分开时,延迟变得很重要。 对于跨大西洋延迟,我们谈论超过100毫秒。 巴西到中国的时间约为250毫秒。 (很高兴我们没有住在木星上。)
听起来你想要一个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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.