我一直在使用Python与关系型数据库(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 可以优化那些执行多次但具有不同值的命令,如何进行优化,这样做值得吗?
谢谢