Может кто-нибудь объяснить, почему я получаю сообщение об ошибке при выполнении следующего простого запроса с пандами:
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
в качестве параметра в панды и она будет работать, но я хочу понять в принципе, что вызывает ошибку, какие ограничения на запросы, которые можно передавать в панды. Запрос, похоже, отлично работает с cursor.execute(query)
.
Да, я могу. Просто хочу понять, в чем проблема с декларацией в принципе.
Первый аргумент read_sql — это строка SQL-запроса, а не объект соединения.
да, не умная ошибка.
Вы передали аргументы .read_sql_query()
в неправильном порядке. Ты использовал
rt = pd.read_sql_query(conn, query)
когда это должно быть
rt = pd.read_sql_query(query, conn)
Зачем нужно декларировать? Просто передайте дату в предложение where через формат iso:
'YYYY-MM-DD'
. Или передать как параметр из Python.