gpt4 book ai didi

python - 有没有办法用 sqlite3 在 python 中重置光标?

转载 作者:行者123 更新时间:2023-12-01 01:15:24 25 4
gpt4 key购买 nike

以下代码中的外循环仅执行一次。我明白为什么。显然,光标一次只能做一件事,而我注释掉的行干扰了我的循环。

我想我可以创建第二个连接,但如果可能的话我想避免这种情况。有没有办法在有问题的代码行之前存储光标位置,并在之后立即恢复它?

        cursor.execute('SELECT ...;')
fetch=cursor.fetchone()
while(fetch):
...
while(endTime<=timeEnd):
if(timeZero<=startTime):
# cursor.execute("INSERT INTO chronology ...")
...
fetch=cursor.fetchone()

最佳答案

没有。你不能(嗯……取决于图书馆,但通常不能)。这就是游标的定义。但是,您可以使用多个游标来执行此操作:

cursor = conn.cursor()
write_cur = conn.cursor()
cursor.execute('SELECT ...;')
fetch=cursor.fetchone()
while(fetch):
...
write_cur.execute("INSERT ...")
...
fetch = cursor.fetchone()

但是,在这种情况下,我通常使用 fetchall() 而不是 fetchone() 并准备出于性能原因所需的所有 INSERT 情况:

  1. (弱)通常库通过调用 C 库来处理获取。因此使用 fetchall() 可以避免在 C 和 python 之间过多切换
  2. (强)即使 SQL 引擎已经缓存了 SQL 命令的解析结果,在循环内多次执行 INSERT 也会很慢。在这种情况下,通常有一个更快的 executemany() 来允许将绑定(bind)参数的 列表 传递给 INSERT(请参阅 How does binding parameters work in SQLite3 (with minimal example)? )

如果您这样做,则不需要另一个光标。

关于python - 有没有办法用 sqlite3 在 python 中重置光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394118/

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