gpt4 book ai didi

postgresql - 数据库游标和psycopg2中使用的游标的区别

转载 作者:行者123 更新时间:2023-11-29 13:00:22 25 4
gpt4 key购买 nike

我可能会感到困惑,但这正是我问的原因。使用 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 的游标是客户端的。它的“游标”实际上与数据库游标没有任何关系。当您运行一个语句时,结果集(如果有的话)被读入 psycopg2 游标对象。然后您可以在客户端对其进行迭代。从这个意义上说,它是一个游标,因为您可以阅读下一行、滚动游标等。

可以 ask psycopg2 to use true database-side cursors .它不使用 PostgreSQL 的有线协议(protocol)游标支持(不幸的是),而是使用 DECLAREFETCH 等语句在 SQL 级别执行游标。服务器端游标不需要客户端(或服务器)上的大量内存,它们可以在传输整个结果集之前将第一个结果交付给应用程序。但是,默认情况下它们是只进的,这与 psycopg2 的内存客户端游标不同,并且它们会消耗数据库资源直到它们被释放。

两者各有优缺点。

关于postgresql - 数据库游标和psycopg2中使用的游标的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com