Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法用sqlite3在python中重置光标?_Python_Sqlite - Fatal编程技术网

有没有办法用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游标在以下情况下可重置