pyodbc 可以从 table 中读取列名,但对 table 的查询会引发不存在错误

pyodbc can read the column names from a table, but a query on the table raises a does not exist error

我正在尝试通过 pyodbc 查询 table AWS athena。我已经成功创建了一个连接,甚至可以通过 pyodbc 读取列名,但是当我尝试查询 table 时,它显然不存在。

import pyodbc

import pandas as pd

cnxn = pyodbc.connect('DSN=databaseDSN;UID=user;PWD=password')

cursor = cnxn.cursor()

for row in cursor.tables():
     print(row.table_name)

这给出了我数据库中 table 个名字的列表。

for row in cursor.columns(table='tablename'):
     print(row.column_name)

这为我提供了 table 中正确的列名。

sql = "Select * From tablename"
data = pd.read_sql(sql,cnxn)

这会引发错误

DatabaseError: Execution failed on sql 'Select * From tablename': ('42000', '[42000] [Simba][Athena] (1040) An error has been thrown from the AWS Athena client. Error Message: SYNTAX_ERROR: line 1:15: Table awsdatacatalog.default.tablename does not exist 

我已经解决了我自己的问题,我的 table 在一个架构中。

我修复了它:

sql = "Select * From schema.tablename"
data = pd.read_sql(sql,cnxn)