Мне нужно запросить базу данных SQL, используя определенное значение из моего скрипта Python, вот что у меня есть до сих пор:
conn = pyodbc.connect('<SQL-CREDENTIALS-HERE>')
# Create a cursor from the connection
crsr = conn.cursor()
sql = """\
DECLARE @DATA1 AS var_num;
DECLARE @DATA2 OUTPUT;
EXEC EXT_GetDATA
@DATA1,
@DATA2;
"""
crsr.execute(sql)
Для этого я получаю сообщение об ошибке DATA1 является недопустимым типом данных, правильно ли я пишу SQL-запрос? Обратите внимание, что переменная var_num извлекается в скрипте ранее и здесь не показана.
Обновлено: я также пробовал следующий метод и до сих пор не повезло:
соединение = pyodbc.connect('')
# Create a cursor from the connection
crsr = conn.cursor()
sql = """\
DECLARE @DATA1 CHAR(20);
SET DATA1 = var_num;
DECLARE @DATA2 NVARCHAR;
EXEC EXT_GetDATA
@DATA1,
@DATA2 OUTPUT;
"""
crsr.execute(sql)
Однако это все еще не работает и возвращает ошибку:
Exception has occurred: ProgrammingError
(Invalid column name 'var_num'. (207) (SQLExecDirectW)")
может ли кто-нибудь сказать мне, что я делаю неправильно, я не хочу устанавливать var_num
в качестве имени столбца ??
@GordThompson Боюсь, я этого не знаю, мне дали мало информации о БД, всего несколько спецификаций, чтобы запросить ее с помощью этой хранимой процедуры.
Вы можете попробовать SELECT @@VERSION AS ver
и посмотреть, вернет ли он что-нибудь полезное.
@GordThompson приветствует, это устранило ошибки, но не возвращает никакой информации]
Попробуйте print(crsr.execute("SELECT @@VERSION AS ver").fetchval())
@GordThompson возвращает Microsoft SQL Server 2014 SP2
Как показано в вики, должно работать что-то вроде этого:
crsr = conn.cursor()
sql = """\
DECLARE @out NVARCHAR(max);
EXEC EXT_GetDATA
@DATA1 = ?,
@DATA2 = @out OUTPUT;
SELECT @out AS output_value;
"""
crsr.execute(sql, var_num) # pass `var_num` as input parameter value
the_output = crsr.fetchval() # retrieve output parameter value
Пожалуйста, редактировать ваш вопрос, чтобы пометить его конкретным продуктом базы данных, который вы используете (например,
sql-server
для Microsoft SQL Server).