Python操作SQLite遇sqlite3.OperationalError:listinfo表不存在,调试模式正常
问题分析与解决办法
核心原因:你代码里已经计算出了数据库的绝对路径
db_dir,但实际连接时却用了相对路径"app.db"。调试时IDE默认以脚本所在目录为工作目录,能正确找到带listinfo表的数据库;但直接运行脚本时,工作目录可能是你启动脚本的路径(比如命令行当前目录),这时会在该路径下新建一个空的app.db,自然找不到listinfo表。解决步骤:把连接数据库的路径改成你已经计算好的绝对路径
db_dir,这样无论在什么环境下运行,都会连接到脚本同一目录下的app.db。
修改后的代码:
import sqlite3 import os.path BASE_DIR = os.path.dirname(os.path.abspath(__file__)) db_dir = os.path.join(BASE_DIR, 'app.db') # 用os.path.join更跨平台,避免手动拼接路径的问题 def getalldate(): db = sqlite3.connect(db_dir) # 使用绝对路径连接 cr = db.cursor() cr.execute("SELECT * FROM listinfo") result = cr.fetchall() print(result) db.close() # 建议用完数据库后关闭连接 getalldate()
额外提示:尽量用os.path.join拼接路径,比手动加斜杠更适配Windows、Linux等不同系统,避免路径分隔符的兼容问题。
内容的提问来源于stack exchange,提问作者Ahmed Amr
相关产品推荐
相关产品推荐

