guyguyguy12345
guyguyguy12345

Reputation: 571

declare variable with pd.read_sql_query

Can someone explain why do I get an error when executing the following simple query with 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';

I understand that I can pass the variable t as a parameter to pandas and it will work, but I want to understand in principle what is causing the error, what are the restrictions on queries that can be passed to pandas. The query seems to work fine with cursor.execute(query).

Upvotes: 1

Views: 1208

Answers (1)

Gord Thompson
Gord Thompson

Reputation: 123819

You passed the arguments to .read_sql_query() in the wrong order. You used

rt = pd.read_sql_query(conn, query)

when it should be

rt = pd.read_sql_query(query, conn)

Upvotes: 4

Related Questions