有没有办法用sqlite3在python中重置光标?
下面代码中的外部循环只执行一次。我明白为什么。显然,光标一次只能做一件事,而我注释掉的行干扰了我的循环 我想我可以创建第二个连接,但如果可能的话,我希望避免这种情况。有没有一种方法可以将光标位置存储在有问题的代码行之前,然后立即恢复有没有办法用sqlite3在python中重置光标?,python,sqlite,Python,Sqlite,下面代码中的外部循环只执行一次。我明白为什么。显然,光标一次只能做一件事,而我注释掉的行干扰了我的循环 我想我可以创建第二个连接,但如果可能的话,我希望避免这种情况。有没有一种方法可以将光标位置存储在有问题的代码行之前,然后立即恢复 cursor.execute('SELECT ...;') fetch=cursor.fetchone() while(fetch): ... while(endTime
cursor.execute('SELECT ...;')
fetch=cursor.fetchone()
while(fetch):
...
while(endTime<=timeEnd):
if(timeZero<=startTime):
# cursor.execute("INSERT INTO chronology ...")
...
fetch=cursor.fetchone()
cursor.execute('SELECT…;'))
fetch=cursor.fetchone()
while(提取):
...
while(endTime否。您不能(嗯……取决于库,但通常为否)。这是游标的定义。但是,您可以使用多个游标来执行此操作:
cursor = conn.cursor()
write_cur = conn.cursor()
cursor.execute('SELECT ...;')
fetch=cursor.fetchone()
while(fetch):
...
write_cur.execute("INSERT ...")
...
fetch = cursor.fetchone()
但是,在这种情况下,我通常使用fetchall()
而不是fetchone()
,并准备性能原因所需的所有插入案例:
(弱)通常库通过调用C库来处理fetch。因此使用fetchall()
避免在C和python之间进行过多切换
(强)即使SQL引擎已经缓存了SQL命令的解析结果,在循环中多次执行INSERT也是很慢的。通常有一个更快的executemany()
,允许在这种情况下传递要插入的绑定参数的列表(请参阅)
如果这样做,就不需要另一个游标。FWIW似乎也不支持任何类型的重置功能,尽管某些Python API,如前面提到的ArcGIS,显然有可重置的游标
在将光标交给对象工厂(或其他代码)进行处理之前,如果要遍历光标一次以验证或调试查询结果,则重置光标的功能将非常方便。遍历光标后,将在后续处理之前重置光标
Transact-SQL游标在以下情况下可重置