原文链接: http://www.juzicode.com/python-error-sqlite3-operationalerror-table-table-already-exists/
错误提示:
sqlite3建表时提示:sqlite3.OperationalError: table table_juzicode already exists
#juzicode.com/vx:桔子code
import sqlite3
db_name = 'test.db'
table_name = 'table_juzicode'
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
sql = '''CREATE TABLE '''+table_name +''' (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
price FLOAT,
weight FLOAT
)'''
cursor.execute(sql)
==========运行结果:
--------------------------------------------------------------------------- OperationalError Traceback (most recent call last) <ipython-input-7-0d0e9d4b9ba1> in <module> 11 weight FLOAT 12 )''' ---> 13 cursor.execute(sql) OperationalError: table table_juzicode already exists
错误原因:
1、sqlite3使用”CREATE TABLE”建表时,如果数据库文件中已经存在同名的表,会抛异常提示Operation Error。
解决方法:
1、在建表前先检查是否存在该表,如果存在则不建表,不存在时才建表。
#juzicode.com/vx:桔子code
import sqlite3
db_name = 'test.db'
table_name = 'table_juzicode'
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
sql = '''SELECT tbl_name FROM sqlite_master WHERE type = 'table' '''
cursor.execute(sql)
values = cursor.fetchall()
tables = []
for v in values:
tables.append(v[0])
#如果表名不存在,建表
if table_name not in tables:
sql = '''CREATE TABLE '''+table_name +''' (
_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
price FLOAT,
weiht FLOAT
)'''
cursor.execute(sql)
print(table_name + ' 创建成功')
else:
print(table_name + ' 已经存在')
==========运行结果:
table_juzicode 创建成功
==========运行结果(第2次):
table_juzicode 已经存在
扩展内容:
如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。