繁体   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