python sqlite“;创建表(如果不存在)";问题
我在使用sqlite创建表时遇到了一个问题,如果它不存在的话。基本上,我有一张桌子,每隔很长一段时间我就会把它扔下来重新制作一次。但是,如果表已经存在(在我删除并重新生成它之前),那么在第一次尝试插入时会出现以下错误:python sqlite“;创建表(如果不存在)";问题,python,sqlite,Python,Sqlite,我在使用sqlite创建表时遇到了一个问题,如果它不存在的话。基本上,我有一张桌子,每隔很长一段时间我就会把它扔下来重新制作一次。但是,如果表已经存在(在我删除并重新生成它之前),那么在第一次尝试插入时会出现以下错误: Traceback (most recent call last): File "test.py", line 40, in <module> remake() File "test.py", line 31, in remake insert
Traceback (most recent call last):
File "test.py", line 40, in <module>
remake()
File "test.py", line 31, in remake
insert_record(1)
File "test.py", line 36, in insert_record
c.execute(sql)
sqlite3.OperationalError: no such table: table_name
提前感谢:)
我尝试了完全相同的程序
成功了,一点问题也没有,只是
将位置更改为:内存:
编辑:
尝试了完全相同的代码,也没有任何问题
供参考:
也许您应该仔细检查文件
数据的可写性?我可以用以下简化脚本复制该问题:
import sqlite3
location = 'data'
table_name = 'table_name'
conn = sqlite3.connect(location)
c = conn.cursor()
sql = 'create table if not exists ' + table_name + ' (id integer)'
c.execute(sql)
sql = 'drop table ' + table_name
c.execute(sql)
sql = 'create table if not exists ' + table_name + ' (id integer)'
c.execute(sql)
sql = 'insert into ' + table_name + ' (id) values (%d)' % (1)
c.execute(sql)
conn.commit()
要解决此问题,您必须在创建或删除表后关闭并重新连接到db,即在中间添加以下代码:
c.close()
conn.close()
conn = sqlite3.connect(location)
c = conn.cursor()
但不确定原因是什么
更新日期:2018年10月16日
从2.7.12开始,这个问题不再是可复制的,尽管我在变更日志中没有看到它。如果您仍然看到它,请先尝试更新python版本。问题是可重复的。尝试不使用:内存:好的,现在我尝试将位置更改为数据
,并尝试了一次又一次,完全没有问题,输出仍然:插入1
我认为您运行了问题中提到的脚本两次?好的,我确实遇到了与描述相同的问题。我会看看我是否可以简化,看看问题出在哪里,谢谢你的检查。我目前正在运行Python 2.6.5和sqlite3.6.22,尽管我的sqlite3.version在Python中是2.4.1,sqlite3.sqlite_版本是3.6.22。我也在Python3中尝试过这个方法,得到了相同的结果。使数据
世界可写也没有帮助。对于简单的脚本和解决方案+1。我试着在sqlite控制台中键入这些语句,这样就可以了。我只是想知道这应该是pysqlite library.btw的一个bug,运行DDL后不需要提交,这些语句不会在事务中运行。我刚刚遇到了一个非常类似的问题,关闭并在代码中重新创建连接就解决了这个问题。谢谢你们两位。但奇怪的是,这种情况正在发生。我最好的猜测是它是sqlLite中的一个bug。SQL的结尾应该有分号吗?只是想知道。
import sqlite3
location = 'data'
table_name = 'table_name'
conn = sqlite3.connect(location)
c = conn.cursor()
sql = 'create table if not exists ' + table_name + ' (id integer)'
c.execute(sql)
sql = 'drop table ' + table_name
c.execute(sql)
sql = 'create table if not exists ' + table_name + ' (id integer)'
c.execute(sql)
sql = 'insert into ' + table_name + ' (id) values (%d)' % (1)
c.execute(sql)
conn.commit()
c.close()
conn.close()
conn = sqlite3.connect(location)
c = conn.cursor()