提交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
相关产品推荐
相关产品推荐

