从Python访问SQLite中已导入的consumer_complaints表提示不存在的原因排查
这种情况我在日常开发中碰到过好多次,多半是一些容易忽略的细节导致的,咱们一步步来排查:
数据库文件路径不匹配
你在命令行里操作的SQLite数据库文件,和Python脚本连接的可能不是同一个!比如你在命令行的/home/user/data目录下运行sqlite3 complaints.db导入了CSV,但Python脚本在/home/user/projects目录下运行,直接sqlite3.connect('complaints.db')会在当前脚本目录创建一个全新的空数据库,自然找不到表。
解决方法:在Python里先打印当前工作目录确认:import os print(os.getcwd())然后要么把Python脚本移到命令行操作的目录,要么在
connect里写数据库文件的绝对路径,比如sqlite3.connect('/home/user/data/complaints.db')。表名大小写敏感问题
SQLite的表名大小写规则和操作系统有关:Windows下默认不敏感,但Linux/macOS下是严格敏感的。比如你在命令行里导入后生成的表是Consumer_Complaints,但Python里写的是consumer_complaints,就会提示表不存在。
解决方法:在命令行里执行.tables命令,复制粘贴输出的准确表名到Python代码里,确保完全一致。导入后事务未提交
虽然SQLite命令行默认在退出时会提交事务,但有时候如果导入过程中出现异常,或者你没正常退出命令行(比如强行中断),可能导致导入的表没有被持久化到数据库文件里。
解决方法:回到命令行,重新连接数据库,执行COMMIT;命令,然后正常退出,再用Python连接试试。Python代码里的拼写错误
别笑,这真的是高频问题!比如把表名写成consumer_complaint(少了末尾的s),或者下划线写成了连字符,仔细核对命令行.tables显示的表名和Python查询语句里的表名,确保每个字符都一致。误连接到内存数据库
如果你的Python代码里写的是sqlite3.connect(':memory:'),那连接的是一个临时的内存数据库,和你命令行里操作的文件数据库完全无关,肯定找不到表。检查connect的参数,确保指定的是正确的数据库文件名。
先从路径和表名大小写这两个最常见的问题入手排查,一般都能快速解决。
内容的提问来源于stack exchange,提问作者Yags

