如何从 Python 执行雪花存储过程?

时间:2021-04-17 21:48:38

标签: python-3.x stored-procedures snowflake-cloud-data-platform

我在雪花中创建了存储过程,该过程在雪花 UI 中执行得很好,也通过使用 snowsql 从服务器执行。现在我想从python程序执行过程,我试图从python执行,这是我遵循的步骤:

  1. 建立与雪花的连接(能够成功连接。)
<块引用>

cs = ctx.cursor()

  1. 使用适当的角色、仓库、数据库和架构。
  2. 尝试执行如下程序:

cs.execute("call test_proc('value1', 'value2')")   
x = cs.fetchall() 
print(x)

但出现错误:

<块引用>

snowflake.connector.errors.ProgrammingError: 002140 (42601): SQL 编译错误:未知函数 test_proc

你能帮我解决这个问题吗。

谢谢,

2 个答案:

答案 0 :(得分:1)

使用 Python connector 连接到 Snowflake 时,您可以定义 DATABASE/SCHEMA

conn = snowflake.connector.connect(
                user=USER,
                password=PASSWORD,
                account=ACCOUNT,
                warehouse=WAREHOUSE,
                database=DATABASE,
                schema=SCHEMA
                );

一旦你设置好了,你就可以在不使用完全限定名称的情况下调用你的存储过程:

cs.execute("call test_proc('value1', 'value2')");

替代方法是:

<块引用>

Using the Database, Schema, and Warehouse

指定要在其中创建表的数据库和架构。还要指定将为执行 DML 语句和查询提供资源的仓库。

例如,要使用数据库 testdb、模式 testschema 和仓库 tiny_warehouse(之前创建的):

conn.cursor().execute("USE WAREHOUSE tiny_warehouse_mg")
conn.cursor().execute("USE DATABASE testdb_mg")
conn.cursor().execute("USE SCHEMA testdb_mg.testschema_mg")

答案 1 :(得分:0)

实际上,我必须有这样的命令

<块引用>

cs.execute("call yourdbname.schemaname.test_proc('value1', 'value2')")

并且它按预期工作。

谢谢