修复 SHOW TABLES IN DATABASE 名称查询中的错误

问题描述

我正在尝试通过 Python 脚本列出 Amazon AWS Athena 数据库中的所有表。 这是我的脚本:

data = {'name':['database1','database-name','database2']}
# Create DataFrame
df = pd.DataFrame(data)

for index,schema in df.iterrows():
    tables_in_schema = pd.read_sql("SHOW TABLES IN "+schema[0],conn)

运行时出错

当我在 Athena 查询编辑器中运行相同的查询时,出现错误

SHOW TABLES IN database-name

这里是错误

DatabaseError: Execution Failed on sql: SHOW TABLES IN database-name
An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: line 
1:19: mismatched input '-'. Expecting: '.','LIKE',<EOF>
unable to rollback

我认为问题在于数据库名称中的连字符“-”。 我如何在查询中转义这个?

解决方法

您可以改用 Glue 客户端。它提供了一个函数 get_tables(),该函数返回特定数据库中所有表的列表。