Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用动态表解析带有熊猫的SQL参数标记_Python_Pandas_Pyodbc - Fatal编程技术网

Python 使用动态表解析带有熊猫的SQL参数标记

Python 使用动态表解析带有熊猫的SQL参数标记,python,pandas,pyodbc,Python,Pandas,Pyodbc,我有以下代码: query = """ DECLARE @DATABASE VARCHAR(128) = '{}'; DECLARE @SCHEMA VARCHAR(128) = '{}'; DECLARE @TABLE VARCHAR(128) = '{}'; DECLARE @sql VARCHAR(200) = 'SELECT * FROM ' + CONCAT(QUOTENAME(@DATABASE), '.', QUOTENAME(@SCHEM

我有以下代码:

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\u sql\u 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)