[英]Using python sqlalchemy to execute raw queries with WITH statement
[英]Execute a prepared statement in sqlalchemy
我必須針對用戶名運行40K請求:
SELECT * from user WHERE login = :login
它很慢,所以我認為我只會使用一個准備好的語句。
所以我做
e = sqlalchemy.create_engine(...)
c = e.connect()
c.execute("PREPARE userinfo(text) AS SELECT * from user WHERE login = $1")
r = c.execute("EXECUTE userinfo('bob')")
for x in r:
do_foo()
但是我有一個:
InterfaceError: (InterfaceError) cursor already closed None None
我不明白為什么我會例外
不確定如何解決與光標相關的錯誤消息,但是我認為准備工作不會解決您的性能問題-只要您使用SQL Server 2005或更高版本, SELECT * from user WHERE login = $login
的執行計划就已經可以重復使用,並且准備好的語句不會提高性能。 我不了解MySql或其他SQL數據庫服務器,但我懷疑它們對Ad-Hoc查詢也有類似的優化,使准備好的語句變得多余。
聽起來性能下降的原因更多地取決於您要進行40,000次數據庫往返的事實-您應該嘗試重寫查詢,以便僅執行一個帶有登錄名列表的SQL語句。 我認為MySql支持aray數據類型是正確的嗎? 如果沒有(或者您正在使用Microsoft SQL),則應考慮傳遞某種分隔的用戶名列表。
通過討論 ,最好檢查粘貼調試日志,以防出現更好的錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.