[snowflake python connector ]如何绑定字符串格式
[snowflake python connector ]How to bindings inside a string format
我想在执行时使用数据绑定sql。
我只想绑定在字符串中间,但是不行。
我尝试了以下,但都导致执行错误。
Python
param = {
"env": "dev"
"s3_credential": "secret"
}
cursor().execute(sql, param)
sql1
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-'%(env)s'/tmp/'
credentials = (aws_role = %(s3_credential)s )
FILE_FORMAT = ( TYPE=JSON);
错误信息1
snowflake.connector.errors.ProgrammingError: 091006 (22000): Bucket name 'my-stage-demo-'dev'' in the stage location is not supported. Valid bucket names must consist of lowercase letters, digits, hyphens '-', and periods '.'.
SQL2
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-%(env)s/tmp/'
credentials = (aws_role = %(s3_credential)s )
FILE_FORMAT = ( TYPE=JSON);
错误信息2
snowflake.connector.errors.ProgrammingError: 001003 (42000): SQL compilation error:
syntax error line 2 at position 32 unexpected ''/tmp/''.
我想执行如下绑定结果,请问如何指定?
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-dev/tmp/'
credentials = (aws_role = "secret" )
FILE_FORMAT = ( TYPE=JSON);
您不能绑定子字符串,只能绑定完整的语法元素。
在 Python 中,您可以执行以下操作:
cursor.execute(
"SELECT t.*, 'P'||:2 p2 FROM IDENTIFIER(:1) t",
[['"my_db"."my_schema"."my_table"', '2. parameter']]
)
您只能在允许使用表达式的地方使用值的一部分(如上面的 'P'||:2
)。还有一些标识符的规定,例如上面使用 IDENTIFIER()
.
的 table 名称
不幸的是,对于 CREATE OR REPLACE STAGE
命令,似乎根本不支持对 s3 存储桶或绑定变量使用表达式。
这意味着您必须对 SQL 文本使用替换,而不是变量绑定。
我想在执行时使用数据绑定sql。 我只想绑定在字符串中间,但是不行。
我尝试了以下,但都导致执行错误。
Python
param = {
"env": "dev"
"s3_credential": "secret"
}
cursor().execute(sql, param)
sql1
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-'%(env)s'/tmp/'
credentials = (aws_role = %(s3_credential)s )
FILE_FORMAT = ( TYPE=JSON);
错误信息1
snowflake.connector.errors.ProgrammingError: 091006 (22000): Bucket name 'my-stage-demo-'dev'' in the stage location is not supported. Valid bucket names must consist of lowercase letters, digits, hyphens '-', and periods '.'.
SQL2
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-%(env)s/tmp/'
credentials = (aws_role = %(s3_credential)s )
FILE_FORMAT = ( TYPE=JSON);
错误信息2
snowflake.connector.errors.ProgrammingError: 001003 (42000): SQL compilation error:
syntax error line 2 at position 32 unexpected ''/tmp/''.
我想执行如下绑定结果,请问如何指定?
CREATE OR REPLACE STAGE my_s3_stage_demo
URL='s3://my-stage-demo-dev/tmp/'
credentials = (aws_role = "secret" )
FILE_FORMAT = ( TYPE=JSON);
您不能绑定子字符串,只能绑定完整的语法元素。
在 Python 中,您可以执行以下操作:
cursor.execute(
"SELECT t.*, 'P'||:2 p2 FROM IDENTIFIER(:1) t",
[['"my_db"."my_schema"."my_table"', '2. parameter']]
)
您只能在允许使用表达式的地方使用值的一部分(如上面的 'P'||:2
)。还有一些标识符的规定,例如上面使用 IDENTIFIER()
.
不幸的是,对于 CREATE OR REPLACE STAGE
命令,似乎根本不支持对 s3 存储桶或绑定变量使用表达式。
这意味着您必须对 SQL 文本使用替换,而不是变量绑定。