ai didi

python - 使用动态表用 pandas 解析 SQL 参数标记

转载 作者:行者123 更新时间:2023-12-01 00:35:33 24 4
gpt4 key购买 nike

我有以下代码:

query = """
DECLARE @DATABASE VARCHAR(128) = '{}';
DECLARE @SCHEMA VARCHAR(128) = '{}';
DECLARE @TABLE VARCHAR(128) = '{}';
DECLARE @sql VARCHAR(200) =
'SELECT * FROM ' + CONCAT(QUOTENAME(@DATABASE), '.', QUOTENAME(@SCHEMA), '.', QUOTENAME(@TABLE), ' WHERE COD = ?')
EXEC sp_executesql @sql
""".format(
db_config.db.database, db_config.db.schema, db_config.db.table
)

return pd.read_sql_query(
query, db_config.db.connection, params=[cod_sol]
)

它一直工作正常,直到我添加了 sql 参数标记 ' WHERE COD = ?'。 pandas 或 pyodbc 似乎无法解析这种类型的查询,使用简单的 sql 语句就可以,但不能解析动态表。

这是最终 @sql 变量的结果:

SELECT * FROM [DB].[SCHEMA].[TABLE] WHERE COD = ?

所以看来是对的。

可以做这样的事情吗?

最佳答案

我已经解决了!

我没有尝试一步直接执行 sql 语句,而是首先构造 sql 查询,并生成其最终形式:

SELECT * FROM [DB].[SCHEMA].[TABLE] WHERE COD = ?

然后,我调用 read_sql_query 传入参数

query = """
DECLARE @DATABASE VARCHAR(128) = '{}';
DECLARE @SCHEMA VARCHAR(128) = '{}';
DECLARE @TABLE VARCHAR(128) = '{}';
DECLARE @sql NVARCHAR(200) =
'SELECT * FROM ' + CONCAT(QUOTENAME(@DATABASE), '.', QUOTENAME(@SCHEMA), '.', QUOTENAME(@TABLE)) WHERE COD = ?;
SELECT @sql
""".format(
db_config.db.database, db_config.db.schema, db_config.db.table
)
con = db_config.db.connection
query = con.execute(query).fetchval()

# Now this is working
pd.read_sql_query(query, con, params=[cod_xml]).reset_index(drop=True)

关于python - 使用动态表用 pandas 解析 SQL 参数标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57807496/

24 4 0
文章推荐: mysql - 不将用户数据保存到 laravel 5.6 中的用户表
文章推荐: mysql - 准备好的 mysql 查询,其中值可能为 NULL
文章推荐: mysql - 使用验证值在两列中对查询进行排序
文章推荐: Python3编译的应用程序通过zip减少大小?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com