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

提交HTML表单后Py-Script无法写入SQLite数据库的问题

解决PyScript中SQLite插入数据未持久化的问题

针对你遇到的代码执行无报错但数据未写入SQLite的问题,可从以下几个方向排查修复:

1. 确保目标表存在

如果accounts表未提前创建,SQLite不会自动生成表,插入操作看似执行但实际无数据写入。在连接数据库后先执行建表语句(加IF NOT EXISTS避免重复创建报错):

cursor.execute('''CREATE TABLE IF NOT EXISTS accounts
                  (first_name TEXT, last_name TEXT, email TEXT PRIMARY KEY, password TEXT)''')
conn.commit()

2. 捕获隐藏异常

表面打印了"commited"和"closed",但可能存在未被捕获的插入错误(比如邮箱重复违反主键约束)。用try-except块捕获异常,排查具体问题:

try:
    cursor.execute(sqlite_insert, data_tuple)
    conn.commit()
    print("commited")
except Exception as e:
    print(f"插入失败: {str(e)}")
    conn.rollback()  # 出错时回滚事务
finally:
    conn.close()
    print("closed")

3. 修正数据库路径与存储方式

PyScript运行在浏览器虚拟环境中,默认相对路径可能指向临时内存数据库,而非你配置的持久化文件。改用PyScript的持久化存储路径:

from pyodide import filesystem

def sub(*args, **kwargs):
    # 获取用户持久化存储路径,数据会跨页面保留
    db_path = filesystem.get_user_storage_path() / "data.sqlite"
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    
    # 先确保表存在
    cursor.execute('''CREATE TABLE IF NOT EXISTS accounts
                      (first_name TEXT, last_name TEXT, email TEXT PRIMARY KEY, password TEXT)''')
    conn.commit()
    
    # 后续获取表单数据、插入逻辑不变...

4. 检查py-config配置

确认py-config中的文件配置正确,若需要读取初始数据库文件,配置应为:

<py-config>
    [[fetch]]
    files = ["data.sqlite"]
</py-config>

但注意:fetch仅用于加载初始文件,若要写入持久化数据,必须使用上述的用户存储路径,否则刷新页面后数据会丢失。

内容的提问来源于stack exchange,提问作者Tomas Whiteley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:20