数据库游标和psycopg2中使用的游标的区别
Distinction between database cursors and cursors used in psycopg2
我可能很困惑,但这正是我问的原因。使用 psycopg2
的程序可以在不使用游标的情况下对数据库执行命令吗?我见过的每个 example 都使用 cur = conn.cursor()
然后执行语句,例如 cur.execute("""SELECT datname from pg_database""")
我的问题是 SELECT datname from pg_database
可以不用 cur 来完成吗?
游标的 psycopg2 想法与实际的想法相同 database cursor 即是否存在 1-1 关系?
阅读后
What are the benefits of using database cursor? 我有点困惑,因为他们说的好像游标不是必需的(但我想当通过例如 pgadmin 直接与数据库交互时,它们是必需的)。
该表格是 Python DB-API 的一部分。它的编写是为了适应一个连接可以多路复用具有打开结果集的多个语句的数据库,并模拟数据库不直接支持它的情况。
DB-API 期望数据库驱动程序始终使用游标对象,而不是用两种方法来做同样的事情 - 使用游标或不使用游标,即使它们只保留一个结果立即打开。客户端和数据库端游标的界面相同。
默认情况下 psycopg2
的游标是客户端的。它的 "cursors" 与数据库游标没有任何关系。当您 运行 一条语句时,结果集(如果有的话)被读入 psycopg2
游标对象。然后您可以在客户端对其进行迭代。从这个意义上说,它是一个游标,因为您可以读取下一行、滚动游标等。
你可以ask psycopg2
to use true database-side cursors。它不使用 PostgreSQL 的有线协议游标支持(不幸的是),而是使用 DECLARE
、FETCH
等语句在 SQL 级别执行游标。服务器端游标不需要客户端(或服务器)上的大量内存,它们可以在传输整个结果集之前将第一个结果交付给应用程序。但是,默认情况下,它们是只进的,与 psycopg2 的内存客户端游标不同,它们会消耗数据库资源,直到它们被释放。
两者各有优缺点。
我可能很困惑,但这正是我问的原因。使用 psycopg2
的程序可以在不使用游标的情况下对数据库执行命令吗?我见过的每个 example 都使用 cur = conn.cursor()
然后执行语句,例如 cur.execute("""SELECT datname from pg_database""")
我的问题是 SELECT datname from pg_database
可以不用 cur 来完成吗?
游标的 psycopg2 想法与实际的想法相同 database cursor 即是否存在 1-1 关系?
阅读后 What are the benefits of using database cursor? 我有点困惑,因为他们说的好像游标不是必需的(但我想当通过例如 pgadmin 直接与数据库交互时,它们是必需的)。
该表格是 Python DB-API 的一部分。它的编写是为了适应一个连接可以多路复用具有打开结果集的多个语句的数据库,并模拟数据库不直接支持它的情况。
DB-API 期望数据库驱动程序始终使用游标对象,而不是用两种方法来做同样的事情 - 使用游标或不使用游标,即使它们只保留一个结果立即打开。客户端和数据库端游标的界面相同。
默认情况下 psycopg2
的游标是客户端的。它的 "cursors" 与数据库游标没有任何关系。当您 运行 一条语句时,结果集(如果有的话)被读入 psycopg2
游标对象。然后您可以在客户端对其进行迭代。从这个意义上说,它是一个游标,因为您可以读取下一行、滚动游标等。
你可以ask psycopg2
to use true database-side cursors。它不使用 PostgreSQL 的有线协议游标支持(不幸的是),而是使用 DECLARE
、FETCH
等语句在 SQL 级别执行游标。服务器端游标不需要客户端(或服务器)上的大量内存,它们可以在传输整个结果集之前将第一个结果交付给应用程序。但是,默认情况下,它们是只进的,与 psycopg2 的内存客户端游标不同,它们会消耗数据库资源,直到它们被释放。
两者各有优缺点。