Python向SQLite数据库插入列表至info列报错,求修正方案
修复SQLite自增列插入及表不存在的问题
嘿,我来帮你搞定这个问题!你遇到的报错主要有两个核心原因,我一步步给你拆解并修正代码:
错误原因分析
no such table: data: 你的数据库里还没创建名为data的表,SQLite自然找不到它来执行插入操作。- 插入逻辑问题: 直接把Python变量
database_list硬写到SQL语句里不符合语法;而且SQLite的列不能直接存储Python列表,得先把列表序列化为字符串(比如JSON格式)才能存入。另外因为sess_id是自增列,插入时要明确指定只给info列赋值,不用管自增列。
修正后的代码
我用更安全的参数化查询,还加了with语句自动管理数据库连接(避免忘记关闭连接/游标),同时先确保表存在:
import sqlite3 import json # 用来把列表序列化为JSON字符串 database_list = ['easy', 'mid'] # with语句会自动处理连接和游标,不用手动关闭 with sqlite3.connect('videojs.db') as conn_two: c = conn_two.cursor() # 第一步:创建data表(如果不存在),定义自增主键和info列 c.execute(""" CREATE TABLE IF NOT EXISTS data ( sess_id INTEGER PRIMARY KEY AUTOINCREMENT, info TEXT NOT NULL ) """) # 第二步:把列表转成JSON字符串,用参数化查询插入到info列 serialized_list = json.dumps(database_list) c.execute("INSERT INTO data (info) VALUES (?)", (serialized_list,)) conn_two.commit()
读取数据的小补充
如果之后要把存在info列里的JSON字符串还原成Python列表,可以这么做:
with sqlite3.connect('videojs.db') as conn: c = conn.cursor() c.execute("SELECT info FROM data WHERE sess_id = ?", (1,)) result = c.fetchone() if result: loaded_list = json.loads(result[0]) print(loaded_list) # 输出: ['easy', 'mid']
内容的提问来源于stack exchange,提问作者user9191897
相关产品推荐
相关产品推荐

