簡體   English   中英

在 psycopg2 中對 PostgreSQL 查詢使用多個游標有什么好處?

[英]What is the advantage of using multiple cursors in psycopg2 for PostgreSQL queries?

在 psycopg2 中使用單個 cursor 來執行所有針對使用多個游標的查詢有什么區別。

即,說我這樣做:

import psycopg2 as pg2
con = psycopg2.connect(...)
cur = con.cursor()
cur.execute(...)
....
....
cur.execute(...)
...

之后每次我希望執行查詢時,我都會使用相同的 cursor cur

或者,每次我想查詢我的數據庫時,我都可以這樣做:

with cur as con.cursor():
    cur.execute(...)

在這種情況下,我的 cursor cur將在每次使用后被刪除。

哪種方法更好? 一個人比另一個人有優勢嗎? 一個比另一個快嗎? 更一般地說,為什么一個連接需要多個游標?

這兩個選項具有可比性; 您始終可以對兩者進行基准測試以查看是否存在有意義的差異,但是 psycopg2 游標非常輕量級(它們不代表實際的服務器端, DECLARE d cursor, 除非您傳遞name參數)而且我不希望有任何實質性任一路線的減速。

psycopg2 有游標的原因是雙重的。 第一個是能夠在結果集大於 memory 並且不能一次從數據庫中檢索到的情況下表示服務器端游標; 在這種情況下,cursor 用作與服務器端 cursor 交互的客戶端接口。

第二個是 psycopg2 游標不是線程安全的; 一個連接 object 可以被任何線程自由使用,但是每個 cursor 最多只能被一個線程使用。 每個線程都有一個游標允許多線程應用程序從任何線程訪問數據庫,同時共享相同的連接。

有關更多詳細信息,請參閱有關服務器端游標線程和進程安全的 psycopg2 使用文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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