python无法在sql查询中正确分析表名

2024-04-29 07:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我是《雪花》的新手。我正在尝试使用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]的值。你能告诉我错误在哪里吗


Tags: executesqlconnectorobjectsschematablewarehouseselect
2条回答

问题很可能不是表名,而是代码中使用的角色。角色很可能无法访问数据库及其表,因此会看到错误消息

请同时使用架构和表名,因为可能会在不同的架构中使用表雪花_测试:

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

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

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

相关问题 更多 >