【发布时间】:2020-02-13 21:20:49
【问题描述】:
这个 Python 脚本一直运行良好,直到今天。我最近在FROM 子句中列出的表中添加了一列。但是,它不是错误消息中列出的字段。
我也尝试将pyodbc.pooling = False 添加到代码中,但没有任何改变。
我很茫然,任何帮助将不胜感激。
# Load the needed packages
import pyodbc
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
# Define the connection parameters for MS Access
myDataSources = pyodbc.dataSources()
access_driver = myDataSources['MS Access Database']
file = '\Datasets\BookData.accdb'
# Connect to MS Access
cnxn = pyodbc.connect(Driver = access_driver, DBQ = file)
# Create a query which pulls in the correct data from MS Access
query = pd.read_sql_query('''SELECT * FROM table''', cnxn)
# Close the connection to the MS Access database
cnxn.close()
错误信息
DatabaseError: sql 'SELECT * FROM table' 执行失败: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] 指定字段 'different_table.[field] 可以引用多个 SQL 语句的 FROM 子句中列出的表。 (-3007) (SQLExecDirectW)")
【问题讨论】:
-
你添加的数据字段类型是什么?是多值字段、附件类型等吗?
-
Parfait,这只是 MS Access 查询中的一个简单 iif 语句,如果满足某个要求,它将 qty 乘以 2。此后我删除了该字段,但尝试在 Python 中加载时仍然遇到相同的错误。
-
尝试使用MSAccess.exe Compact & Repair数据库
-
Parfait,我按照你的建议完成了压缩和修复。不幸的是,我在运行 python 脚本时仍然收到相同的错误消息。
-
FROM中的 table 实际上是表还是存储查询?尝试显式指定列,不要在SELECT中使用*。
标签: python pandas ms-access pyodbc