![](/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.