连接SQLite3数据库报错:OperationalError: no such table: MMM
解决SQLite3 "no such table: MMM" 错误的排查步骤
这种情况我碰到过好多次,别慌,咱们一步步来定位问题:
1. 先确认Python连接的是正确的数据库文件
sqlite3.connect('database.db') 默认会在当前工作目录下找这个文件,而这个目录可能和你存放.py文件的目录不一样!
先加几行代码打印当前工作目录,验证一下:
import os import sqlite3 print("当前工作目录:", os.getcwd()) # 看看Python现在在哪找文件 db = sqlite3.connect('database.db')
如果打印出来的目录和你的database.db实际所在目录不一致,就改用绝对路径连接数据库,比如:
# macOS/Linux示例 db = sqlite3.connect('/Users/your_username/your_project_folder/database.db') # Windows示例(注意双反斜杠) db = sqlite3.connect('C:\\Users\\your_username\\your_project_folder\\database.db')
2. 验证数据库里确实存在MMM表
有时候你以为打开的是正确的数据库,其实可能搞错了文件。可以用以下代码直接查询数据库里的所有表:
import sqlite3 db = sqlite3.connect('database.db') c = db.cursor() c.execute("SELECT name FROM sqlite_master WHERE type='table';") print("数据库中的所有表:", c.fetchall()) c.close() db.close()
如果输出里没有MMM,那说明你连接的数据库文件不对,赶紧找到正确的那个文件再试。
另外要注意大小写问题:SQLite在Linux/macOS下是区分表名大小写的,如果你的实际表名是mmm(小写),但代码里写的是MMM(大写),就会报错。Windows下则不区分。
3. 检查拼写和特殊字符
确认代码里的表名MMM和数据库里的表名完全一致,没有多打、少打字符,也没有空格或者特殊符号(比如是不是叫MMM_或者 MMM?)。
最后再试一次修正后的代码
比如用绝对路径连接,同时先检查表存在的完整代码:
import os import sqlite3 # 替换成你的数据库绝对路径 db_path = '/Users/your_username/your_project/database.db' db = sqlite3.connect(db_path) c = db.cursor() # 先确认表存在 c.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='MMM';") table_exists = c.fetchone() if not table_exists: print("错误:数据库中不存在MMM表,请检查文件路径或表名!") else: c.execute('SELECT * FROM MMM WHERE Open >200 AND Close <201') for row in c.fetchall(): print(row) c.close() db.close()
内容的提问来源于stack exchange,提问作者vicky113
相关产品推荐
相关产品推荐

