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

如何使用SQLite创建多个数据库及解决关联Python、Tkinter报错问题

问题修复方案

1. TypeError错误修复

报错TypeError: 'str' object cannot be interpreted as an integer的核心原因是函数参数和全局Listbox组件同名冲突:你定义的fill_item_list函数参数名为items,和全局的Listbox控件变量名完全一致,函数执行时会优先使用传入的数据库查询结果(字符串/元组类型)调用insert()方法,触发类型错误。
修复代码如下:

# 修改fill_item_list的参数名,避免和全局Listbox重名
def fill_item_list(data_list):
    for item_ in data_list:
        # 此处items为全局Listbox组件,不会被参数覆盖
        items.insert(END, item_)

def item_list_view():
    clear_item_list()
    data_list = app.data_1.view()
    fill_item_list(data_list)

2. NameError错误修复

NameError: name 'xxx_screen' is not defined是模块循环导入导致的:你在main.py中导入了子模块内容,子模块顶层直接执行了界面启动逻辑,同时子模块没有正确导入main.py中定义的对应页面函数。
修复方案:

  • 子模块不要在顶层直接执行界面启动逻辑,将启动逻辑放在if __name__ == "__main__"判断内
  • 跨模块调用函数前补充正确的导入语句,比如在manager_sign_in.py头部添加from app.main import main_screen
    示例:
# user_sign_in.py 底部逻辑修改为
if __name__ == "__main__":
    user_screen()

3. price字段为字符串类型的修复

SQLite是动态类型数据库,即使定义了price INTEGER类型,插入时传入字符串'6'也会直接存储为字符串,不会自动做类型转换。你在插入数据前将价格转换为int类型即可:

# 插入数据前转换类型,比如你示例输入的第三个值'6'先转成int
price = int(price_input_str)
# 执行INSERT操作时传入int类型的price即可

4. 多SQLite数据库创建方法

创建多个SQLite数据库只需连接不同的.db文件路径即可,每个路径对应一个独立的数据库:

import sqlite3
# 连接第一个数据库,文件不存在会自动创建
conn1 = sqlite3.connect("store.db")
# 连接第二个数据库
conn2 = sqlite3.connect("user.db")

# 每个连接单独执行建表、增删改查操作即可
cursor1 = conn1.cursor()
cursor1.execute("CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY , Namee VARCHAR , price INTEGER )")
conn1.commit()

cursor2 = conn2.cursor()
cursor2.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY , username VARCHAR )")
conn2.commit()

内容的提问来源于stack exchange,提问作者Mobin Bagheri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:27:03