无法在 sqlite3 中对关闭的游标进行操作 python
Cannot operate on a closed cursor in sqlite3 python
我一直在关注这个 YouTube 播放列表中的 5 部分教程:https://www.youtube.com/playlist?list=PLQVvvaa0QuDezJh0sC5CqXLKZTSKU1YNo
我正在使用带有 Python 的 Jupyter notebook,代码如下:
import sqlite3
import time
import datetime
import random
conn = sqlite3.connect("tutorial2.db")
c = conn.cursor()
然后我创建几个函数。
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot (unix REAL, datestamp TEXT,
keyword TEXT, value REAL)')
def data_entry():
c.execute("INSERT INTO stuffToPlot VALUES (145123542, '2016-01-03',
'Python', 7)")
conn.commit()
c.close()
conn.close()
create_table()
data_entry()
第一次运行正常,在C:\Users\Michael生成了一个db文件
但是,当我再次尝试 运行 仅 create_table() 函数时,出现以下错误:
ProgrammingError: Cannot operate on a closed cursor.
任何能够帮助解决此问题的人将不胜感激!
错误非常明确:您不能 运行 查询已关闭的游标。这里情况更糟,因为您在 data_entry()
函数的第一次调用时也关闭了连接。
我建议为每个查询打开一个游标,然后在完成查询后将其关闭,并且只在脚本结束时关闭连接:
import sqlite3
import time
import datetime
import random
conn = sqlite3.connect("tutorial2.db")
def create_table():
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot (unix REAL, datestamp TEXT, keyword TEXT, value REAL)')
c.close()
def data_entry():
c = conn.cursor()
c.execute("INSERT INTO stuffToPlot VALUES (145123542, '2016-01-03', 'Python', 7)")
conn.commit()
c.close()
create_table()
data_entry()
通过在完成所有查询后移动 conn.close()
语句,并仅在需要时打开游标,错误就不会再发生。
编辑:您的视频中发生的情况如下:
- 他首先将整个脚本执行一次。
- 他评论了创建 table 的行。
- 他第二次执行了整个脚本。
我认为您可能是在 python 交互式会话中输入命令,这与他在视频中所做的不一样,因为当他重新执行脚本时,一个新的连接和光标已创建,而如果您只是试图再次调用该函数,则游标和连接已经关闭,这会导致错误。
我一直在关注这个 YouTube 播放列表中的 5 部分教程:https://www.youtube.com/playlist?list=PLQVvvaa0QuDezJh0sC5CqXLKZTSKU1YNo
我正在使用带有 Python 的 Jupyter notebook,代码如下:
import sqlite3
import time
import datetime
import random
conn = sqlite3.connect("tutorial2.db")
c = conn.cursor()
然后我创建几个函数。
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot (unix REAL, datestamp TEXT,
keyword TEXT, value REAL)')
def data_entry():
c.execute("INSERT INTO stuffToPlot VALUES (145123542, '2016-01-03',
'Python', 7)")
conn.commit()
c.close()
conn.close()
create_table()
data_entry()
第一次运行正常,在C:\Users\Michael生成了一个db文件 但是,当我再次尝试 运行 仅 create_table() 函数时,出现以下错误:
ProgrammingError: Cannot operate on a closed cursor.
任何能够帮助解决此问题的人将不胜感激!
错误非常明确:您不能 运行 查询已关闭的游标。这里情况更糟,因为您在 data_entry()
函数的第一次调用时也关闭了连接。
我建议为每个查询打开一个游标,然后在完成查询后将其关闭,并且只在脚本结束时关闭连接:
import sqlite3
import time
import datetime
import random
conn = sqlite3.connect("tutorial2.db")
def create_table():
c = conn.cursor()
c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot (unix REAL, datestamp TEXT, keyword TEXT, value REAL)')
c.close()
def data_entry():
c = conn.cursor()
c.execute("INSERT INTO stuffToPlot VALUES (145123542, '2016-01-03', 'Python', 7)")
conn.commit()
c.close()
create_table()
data_entry()
通过在完成所有查询后移动 conn.close()
语句,并仅在需要时打开游标,错误就不会再发生。
编辑:您的视频中发生的情况如下:
- 他首先将整个脚本执行一次。
- 他评论了创建 table 的行。
- 他第二次执行了整个脚本。
我认为您可能是在 python 交互式会话中输入命令,这与他在视频中所做的不一样,因为当他重新执行脚本时,一个新的连接和光标已创建,而如果您只是试图再次调用该函数,则游标和连接已经关闭,这会导致错误。