使用 pandas.read_sql 和 MSAccess 的特定表名的“sql 执行失败”
Posted
技术标签:
【中文标题】使用 pandas.read_sql 和 MSAccess 的特定表名的“sql 执行失败”【英文标题】:"Execution failed on sql" for specific table name using pandas.read_sql and MSAccess 【发布时间】:2015-10-24 21:49:15 【问题描述】:最奇怪的事情正在发生。我正在使用 Python 2.7 32 位中的 pypyodbc 和 pandas.io.sql 连接到 Access DB。以下代码可以完美地与漂亮的任何表名 (table_name) 配合使用:
var = psql.read_sql("SELECT * FROM table_name;",conn)
名为 Currency 的表除外。 我什至可以调用表 Currec 并且代码可以正常工作,没问题。只要我在末尾添加 y,我就会得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 421, in read_sql
coerce_float=coerce_float, parse_dates=parse_dates)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1046, in read_sql
cursor = self.execute(*args)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1041, in execute
raise_with_traceback(ex)
File "C:\Python27\lib\site-packages\pandas\io\sql.py", line 1030, in execute
cur.execute(*args)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 1605, in execute
self.execdirect(query_string)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 1631, in execdirect
check_success(self, ret)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 986, in check_success
ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
File "C:\Python27\lib\site-packages\pypyodbc.py", line 954, in ctrl_err
raise ProgrammingError(state,err_text)
pandas.io.sql.DatabaseError: Execution failed on sql: SELECT * FROM Currency;
有什么想法吗?
谢谢
【问题讨论】:
【参考方案1】:Currency
是 Access SQL 中的 reserved word,因此如果需要将其用作表(或列)名称,则必须将其括在方括号中,即
SELECT ... FROM [Currency]
【讨论】:
非常感谢!这样做。我实际上在寻找类似的东西,但只找到了受限制的字符,但没有找到单词。感谢您的链接,非常有用。以上是关于使用 pandas.read_sql 和 MSAccess 的特定表名的“sql 执行失败”的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas read_sql 返回生成器对象