python 无法在 sql 查询中正确解析 table 名称

python unable to parse table name correctly in sql query

我是雪花新手。我正在尝试使用 python 脚本获取数据库中所有表的 ddl 。

import snowflake.connector
import sys


# Gets the version
cnx = snowflake.connector.connect(
    user='username',
    password='password',
    account='account',
    database='db',
    schema='schema',
    warehouse='warehouse',
    role='role'
    )
cnx.cursor().execute("USE warehouse warehouseName") 
cnx.cursor().execute("USE database dbName")
cnx = cnx.cursor()

dbSchema='schema name'

sql_select_objects = "select TABLE_NAME,TABLE_SCHEMA,TABLE_TYPE from  INFORMATION_SCHEMA.TABLES  WHERE TABLE_SCHEMA='" + dbSchema + "';"

print(sql_select_objects)

try:
    cnx.execute(sql_select_objects)
    print('Query ID=' + cnx.sfqid)

    rows = cnx.fetchall()
    print("rows count:", len(rows))
    for row in rows:
        #print(row[0])
        file = open(row[0] + ".sql","w")
        rw='"' + row[0] + '"'
        print(rw)
        sql_ddl_object = "SELECT GET_DDL('TABLE', '" + row[0] + "')"
        print(sql_ddl_object)
        cnx.execute(sql_ddl_object)
        print('SQL2 sfqid=' + cnx.sfqid)
        row_ddl_table = cnx.fetchall()
        #print(row_ddl_table[0][0])
        file.write(str(row_ddl_table[0][0]))
        file.write("\n")
    
finally:
    cnx.close()

当我执行上面的脚本时出现错误:

snowflake.connector.errors.ProgrammingError: 002003 (02000): SQL compilation error:

Table 'SNOWFLAKE_TEST' does not exist or not authorized.

行“SELECT GET_DDL('TABLE', '” + row[0] + “')”,我相信 python 不是 正确解析行 [0] 的值。你能告诉我错误在哪里吗?

很可能问题不在于 table 名称,而在于您在代码中使用的角色。该角色很可能无权访问数据库并且它是 table 因此会看到错误消息。

请同时使用模式和 table 名称,因为您可能在不同的模式中有 table SNOWFLAKE_TEST:

"SELECT GET_DDL('TABLE', '" + row[1] + "." + row[0] + "')"

我还会用双引号将 table 名称和架构名称括起来,因为您的架构或 table 可能是使用区分大小写的名称创建的:

"SELECT GET_DDL('TABLE', '\"" + row[1] + "\".\"" + row[0] + "\"')"