如何在python中传递日期参数以执行sql存储过程

如何在python中传递日期参数以执行sql存储过程,python,python-3.x,pandas,Python,Python 3.x,Pandas,这种方式有效: import pandas import pyodbc import datetime as dt server = 'myserver' db = 'mydb' myparams = ['2017-02-01','2017-02-28', None] # None substitutes NULL in sql connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATA

这种方式有效:

import pandas
import pyodbc
import datetime as dt  

server = 'myserver'
db = 'mydb' 
myparams = ['2017-02-01','2017-02-28', None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
import datetime as dt

today = dt.date.today()
prev_monday = today - dt.timedelta(days=9)
prev_sunday = today - dt.timedelta(days=3)

myparams = [prev_monday,prev_sunday, None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
    cur.execute(*args)
pandas.io.sql.DatabaseError: Execution failed on sql 'EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?': ('HYC00', '[HYC00] [Microsoft][ODBC SQL Server Driver]Optional feature not implemented (0) (SQLBindParameter)')
但这种方法不起作用:

import pandas
import pyodbc
import datetime as dt  

server = 'myserver'
db = 'mydb' 
myparams = ['2017-02-01','2017-02-28', None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
import datetime as dt

today = dt.date.today()
prev_monday = today - dt.timedelta(days=9)
prev_sunday = today - dt.timedelta(days=3)

myparams = [prev_monday,prev_sunday, None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
    cur.execute(*args)
pandas.io.sql.DatabaseError: Execution failed on sql 'EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?': ('HYC00', '[HYC00] [Microsoft][ODBC SQL Server Driver]Optional feature not implemented (0) (SQLBindParameter)')
错误消息:

import pandas
import pyodbc
import datetime as dt  

server = 'myserver'
db = 'mydb' 
myparams = ['2017-02-01','2017-02-28', None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
import datetime as dt

today = dt.date.today()
prev_monday = today - dt.timedelta(days=9)
prev_sunday = today - dt.timedelta(days=3)

myparams = [prev_monday,prev_sunday, None]  # None substitutes NULL in sql

connection_string = pyodbc.connect('DRIVER={SQL Server};server='+server+';DATABASE='+ db+';Trusted_Connection=yes;')
df = pandas.read_sql_query('EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?', connection_string, params = myparams)
    cur.execute(*args)
pandas.io.sql.DatabaseError: Execution failed on sql 'EXEC PythonTest_Align_RSrptAccountCurrentMunich @EffectiveDateFrom=?,@EffectiveDateTo=?,@ProducerLocationID=?': ('HYC00', '[HYC00] [Microsoft][ODBC SQL Server Driver]Optional feature not implemented (0) (SQLBindParameter)')

python中是否有传递日期参数的特定方法?

我猜SQL无法处理日期时间值

尝试使用
strftime

import datetime as dt

today = dt.date.today()
prev_monday = (today - dt.timedelta(days=9)).strftime('%Y-%m-%d')
prev_sunday = (today - dt.timedelta(days=3)).strftime('%Y-%m-%d')

myparams = [prev_monday,prev_sunday, None]
print(myparams)
['2019-10-14', '2019-10-20', None]

我以前没有在pandas中执行过存储过程(虽然我正在尝试在databricks中执行),但是您可以尝试使用
pd.read_sql()
来代替它吗?谢谢。但是我得到了同样的错误,有趣的是,{}.format(dt.date.today())给出了'2019-10-23',这是相同的字符串符号。这就是为什么这种方法有点令人费解的原因,它返回空的DataFrame,但存储过程执行?您是否在SQL中尝试过查看dB中是否存在这些值?谢谢。对不起,我切换到开发环境,那里没有数据。工作完美。谢谢大家!@oleg想知道sql炼金术是否也有同样的行为,谢谢。