Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在psycopg2中为PostgreSQL查询使用多个游标有什么好处?_Python_Sql_Postgresql_Psycopg2_Database Cursor - Fatal编程技术网

Python 在psycopg2中为PostgreSQL查询使用多个游标有什么好处?

Python 在psycopg2中为PostgreSQL查询使用多个游标有什么好处?,python,sql,postgresql,psycopg2,database-cursor,Python,Sql,Postgresql,Psycopg2,Database Cursor,在psycopg2中使用一个游标执行所有查询与使用多个游标有什么区别 也就是说,假设我这样做: import psycopg2 as pg2 con = psycopg2.connect(...) cur = con.cursor() cur.execute(...) .... .... cur.execute(...) ... 每次我希望执行一个查询之后,我都使用相同的游标cur 或者,我可以在每次查询数据库时执行此操作: with cur as con.cursor(): cur.

在psycopg2中使用一个游标执行所有查询与使用多个游标有什么区别

也就是说,假设我这样做:

import psycopg2 as pg2
con = psycopg2.connect(...)
cur = con.cursor()
cur.execute(...)
....
....
cur.execute(...)
...
每次我希望执行一个查询之后,我都使用相同的游标
cur

或者,我可以在每次查询数据库时执行此操作:

with cur as con.cursor():
    cur.execute(...)
在这种情况下,每次使用后都会删除我的光标
cur


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

这两个选项是可比较的;您总是可以对两者进行基准测试,以查看是否存在有意义的差异,但psycopg2游标非常轻量级(它们不代表实际的服务器端,
DECLARE
d游标),我不希望任何一条路径出现任何实质性的减速

psycopg2有游标的原因有两个。第一种是能够在结果集大于内存并且无法一次从数据库中检索的情况下表示服务器端游标;在这种情况下,游标充当与服务器端游标交互的客户端接口

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

有关更多详细信息,请参阅和上的psycopg2使用文档