在psycopg2中对PostgreSQL查询使用多个游标有什么优势?

问题描述 投票:0回答:1

[在psycopg2中使用单个游标与使用多个游标执行所有查询之间有什么区别?

即,说我这样做:

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

并且此后每次我希望执行查询时,我都使用相同的光标cur

或者,每次我想查询数据库时,我都可以这样做:

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

在这种情况下,每次使用后都会删除我的光标cur

哪种方法更好?一个人比另一个有优势吗?一个比另一个快吗?更一般而言,为什么甚至需要为一个连接使用多个游标?

python sql postgresql psycopg2
1个回答
0
投票

这两个选项是可比较的;您可以始终对两者进行基准测试以查看是否存在有意义的差异,但是psycopg2游标非常轻巧(它们不代表实际的服务器端,DECLARE d游标,unless you pass a name argument),而且我不希望出现任何实质性的下降从任何一条路线。

psycopg2完全具有游标的原因是双重的。第一种是在结果集大于内存且无法一次从数据库中检索的情况下,能够表示服务器端游标;在这种情况下,游标用作与服务器端游标进行交互的客户端接口。

第二是psycopg2游标不是线程安全的;一个连接对象可以由任何线程自由使用,但是每个游标最多应由一个线程使用。每个线程都有一个游标,允许多线程应用程序从任何线程访问数据库,同时共享相同的连接。

有关更多详细信息,请参见nameserver side cursors上的psycopg2使用文档。

© www.soinside.com 2019 - 2024. All rights reserved.