使用Python和Sql Alchemy库传递参数似乎不起作用

问题描述 投票:0回答:1

如何将参数传递给 SQL 存储过程?

我尝试了很多方法,但都失败了。

这是我最新的尝试。

参数为

BookId

这是我的代码:

bookId = 653

connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=dev;DATABASE=Nemisis"
connection_url = URL.create(
    "mssql+pyodbc", query={"odbc_connect": connection_string})

engine = sa.create_engine(connection_url)

qry = text("EXECUTE dbo.LibraryBookData @BookId = " & bookId)
with engine.connect() as con:
    rs = con.execute(qry)

df = pd.read_sql_query(qry, engine)

这次尝试时我收到此错误:

Exception has occurred: TypeError
    unsupported operand type(s) for &: 'str' and 'int'

我也尝试过这个:

qry = text("EXECUTE dbo.LibraryBookData :BookId")
with engine.connect() as con:
    rs = con.execute(qry, BookId = bookId)

这给了我这个错误:

TypeError: Connection.execute() got an unexpected keyword argument 'bookId'
python python-3.x sqlalchemy
1个回答
0
投票

您原来的问题表明您想使用 pandas'

read_sql_query()
将结果检索到 DataFrame 中。在这种情况下,请使用
params=
并将参数值作为字典传递:

book_id = 653
sql = text("""\
SET NOCOUNT ON;
EXEC dbo.LibraryBookData @BookId = :bookId;
""")
df = pd.read_sql_query(sql, engine, params={"bookId": book_id})

请注意,

SET NOCOUNT ON;
并不总是必需的,但使用 mssql 是一个好习惯。

© www.soinside.com 2019 - 2024. All rights reserved.