簡體   English   中英

在SQLAlchemy Core中執行多個獨立語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM