python - python无法在sql查询中正确解析表名
问题描述
我是雪花的新手。我正在尝试使用 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 编译错误:
表“SNOWFLAKE_TEST”不存在或未经授权。
在 "SELECT GET_DDL('TABLE', '" + row[0] + "')" 行中,我相信 python 没有正确解析 row[0] 的值。你能告诉我错误在哪里吗?
解决方案
很可能问题不在于表名,而在于您在代码中使用的角色。该角色很可能无权访问数据库及其表,因此会看到错误消息。
推荐阅读
- ios - macOS Swift AVCaptureSession sessionPreset 不起作用
- c# - 在 C# Winforms 中将视频转换为 exe
- android - 如何在android studio中编译一个aosp项目?
- ios - ios应用程序的内存消耗
- java - android:layout_gravity="end" 在真实设备中编译时不起作用
- ssl - 我们可以在根 CA 下颁发创建 ssl 证书吗?没有扩展密钥使用(服务器身份验证)
- javascript - 将文件上传到单页应用程序
- angular - 如果Angular4中没有内容,如何隐藏引导模式
- javascript - AngularJS ng-使用 ctrl + 单击更改新选项卡中的打开链接
- elasticsearch - 带有 Elasticsearch 插件的 Couchbase(在数据库中找不到任何文档)