[Соединитель Python снежинки] Как привязки в формате строки - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу использовать привязку данных при выполнении 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);

1 Ответ

0 голосов
/ 01 ноября 2019

Вы не можете связывать подстроки, только завершать синтаксические элементы.

В 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, а не привязку переменных.

...