使用Python pyodbc读取Access数据库报FROM子句语法错误求助
问题排查与修复方案
核心错误原因
- SQL语法错误:表名
2021-08-15包含连字符,Access SQL解析时会将其识别为数值运算表达式,而非表名,需要用方括号包裹特殊名称的表/字段。 - 变量未定义错误:你通过
cursor.execute()执行查询,但后续调用fetchall()时误用了未定义的q对象,需要统一用cursor对象获取结果。 - 可选检查项:使用相对路径拼接的方案需要确认当前工作目录与数据库文件路径匹配,可打印
DB_PATH确认路径正确性。
修正后的可运行代码
import pyodbc from os import getcwd # 方案1:相对路径连接(二选一即可,注释掉不用的方案) DRIVER_NAME = "Microsoft Access Driver (*.mdb, *.accdb)" DB_PATH = getcwd() + "/Regitros_Export_History.accdb" # 可以先打印确认路径是否正确 print("数据库路径:", DB_PATH) conn = pyodbc.connect("Driver={%s};DBQ=%s;" % (DRIVER_NAME, DB_PATH)) # 方案2:绝对路径连接 # conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\enriq\Dropbox\Proyectos\Escission\Amura\Subvenciones\Puertos 4.0\Desarrollo de proyecto\Documentación\Archivos compartidos por Coqui 20210818\PROYECTO MODELOS ML - JIT\Regitros_Export_History.accdb;') cursor = conn.cursor() # 表名用方括号包裹避免语法错误 cursor.execute('SELECT * FROM [2021-08-15]') # 用cursor对象获取查询结果 rows = cursor.fetchall() if rows: for row in rows: print(row) else: print("No hay datos en la tabla.") cursor.close() conn.close()
内容的提问来源于stack exchange,提问作者Enrique
相关产品推荐
相关产品推荐

