【问题标题】:How can I input a python variable into a stored procedure?如何将 python 变量输入到存储过程中?
【发布时间】:2019-04-09 10:56:09
【问题描述】:

我需要使用我的 python 脚本中的特定值查询 SQL Db,这是我目前所拥有的:

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 是在脚本的前面提取的,此处未显示。

编辑:我也尝试了以下方法,但仍然没有运气:

conn = 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 设置为列名??

【问题讨论】:

  • edit 将您的问题标记为您正在使用的特定数据库产品(例如,sql-server 用于 Microsoft SQL Server)。
  • @GordThompson 恐怕这不是我所知道的,我得到的关于数据库的信息很少,只有一些规范可以使用这个存储过程来查询它
  • 你可以试试SELECT @@VERSION AS ver 看看它是否会返回任何有用的信息。
  • @GordThompson 欢呼,这已经消除了错误但没有返回任何信息]
  • 试试print(crsr.execute("SELECT @@VERSION AS ver").fetchval())

标签: python sql sql-server pyodbc


【解决方案1】:

pyodbc Wiki 中所示,这样的事情应该可以工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    相关资源
    最近更新 更多