You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:26:47