在psycopg2中使用一个游标执行所有查询与使用多个游标有什么区别。
i、 e,假设我这样做:
import psycopg2 as pg2
con = psycopg2.connect(...)
cur = con.cursor()
cur.execute(...)
....
....
cur.execute(...)
...
每次我希望执行一个查询之后,我使用相同的游标 cur
.
或者,每次我想查询数据库时都可以这样做:
with cur as con.cursor():
cur.execute(...)
在这种情况下,我的光标 cur
每次使用后都会被删除。
哪种方法更好?一个比另一个有优势吗?一个比另一个快吗?更一般地说,为什么一个连接甚至需要多个游标?
1条答案
按热度按时间7cwmlq891#
这两种选择是可比较的;您总是可以对两者进行基准测试,以查看是否存在有意义的差异,但是psycopg2游标非常轻量级(它们不代表实际的服务器端,
DECLARE
d光标,除非您传递name
我不认为这两条路线会有任何实质性的减速。psycopg2有游标的原因有两个。第一种是能够在结果集大于内存并且不能一次从数据库中检索的情况下表示服务器端游标;在这种情况下,游标充当与服务器端游标交互的客户端接口。
第二是psycopg2游标不是线程安全的;连接对象可以由任何线程自由使用,但每个游标最多只能由一个线程使用。每个线程有一个游标允许多线程应用程序从任何线程访问数据库,同时共享相同的连接。
有关更多详细信息,请参阅服务器端游标、线程和进程安全的psycopg2用法文档。