如何使用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
相关产品推荐
相关产品推荐

