当前位置:  开发笔记 > 编程语言 > 正文

游标如何在Python的DB-API中工作?

如何解决《游标如何在Python的DB-API中工作?》经验,为你挑选了1个好方法。

我一直在使用python和RDBMS'(MySQL和PostgreSQL),我注意到我真的不明白如何使用游标.

通常,他的脚本通过客户端DB-API(如psycopg2或MySQLdb)连接到数据库:

connection = psycopg2.connect(host='otherhost', etc)

然后创建一个游标:

cursor = connection.cursor()

然后可以发出查询和命令:

cursor.execute("SELECT * FROM etc")

现在查询的结果在哪里,我想知道?它在服务器上?还是我的客户端上的一点点,我的服务器上的一点点?然后,如果我们需要访问某些结果,我们会获取它们:

rows = cursor.fetchone() 

要么

rows = cursor.fetchmany()

现在让我们说,我不检索所有行,并决定执行另一个查询,以前的结果会发生什么?是他们的开销.

此外,我应该为每种形式的命令创建一个游标,并以某种方式不断地将它重用于那些相同的命令; 我头psycopg2可以某种方式优化多次执行但具有不同值的命令,它是如何值得的?

谢谢



1> jwp..:

是的,我知道已经几个月了:P

DB-API的游标似乎紧跟SQL游标之后建模。对于AFA资源(行)管理,DB-API没有指定客户端是否必须检索所有行还是将实际的SQL游标声明为DECLARE。只要fetchXXX接口执行了应有的功能,DB-API就会很高兴。

与AFA psycopg2游标有关(您可能知道),“未命名的DB-API游标”将获取整个结果集-AFAIK由libpq缓冲在内存中。“命名的DB-API游标”(一个可能无法移植的psycopg2概念)将按需请求行(fetchXXX方法)。

如“未知”所引用,executemany可用于优化同一命令的多次运行。但是,它不能满足准备好的语句的需要。当具有不同参数集的语句的重复执行不是直接顺序执行时,executemany()的性能将与execute()相同。DB-API确实“为”驱动程序作者提供了缓存执行的语句的能力,但是其实现(语句的范围/生存期是多少?)是不确定的,因此无法在DB-API实现中设置期望值。

如果要将大量数据加载到PostgreSQL中,强烈建议尝试找到一种使用COPY的方法。

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有