【问题标题】:declare variable with pd.read_sql_query用 pd.read_sql_query 声明变量
【发布时间】:2021-03-23 20:06:39
【问题描述】:

有人可以解释为什么我在使用 pandas 执行以下简单查询时会出错:

import pyodbc
import pandas as pd

connstr = 'Driver={SQL Server}; Server=sr1; Database=db'
conn = pyodbc.connect(connstr)
query = """DECLARE @t AS DATETIME;
            SET @t = \'12-01-2020\';
            
            select top 10 AccountNumber
        FROM db.tb
          where ForecastDate >= @t"""


rt = pd.read_sql_query(conn, query)
conn.close()

ArgumentError: Could not parse rfc1738 URL from string 'DECLARE @t AS DATETIME;
            SET @t = '12-01-2020';

我知道我可以将变量t 作为参数传递给pandas,它会起作用,但我想原则上了解导致错误的原因,对可以传递给pandas 的查询有哪些限制。查询似乎与cursor.execute(query) 一起工作正常。

【问题讨论】:

  • 为什么需要申报?只需通过 iso 格式将日期传递到 where 子句:'YYYY-MM-DD'。或者从 Python 中作为参数传递。
  • 是的,我可以。我只是想了解原则上声明有什么问题。
  • read_sql 的第一个参数是 SQL 查询字符串而不是连接对象。
  • 是的,这不是一个聪明的错误。

标签: python sql sql-server pandas pyodbc


【解决方案1】:

您以错误的顺序将参数传递给.read_sql_query()。你用过

rt = pd.read_sql_query(conn, query)

应该是什么时候

rt = pd.read_sql_query(query, conn)

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2012-06-15
    • 2014-11-09
    相关资源
    最近更新 更多