将日期传递给 python 中调用 sql 服务器的函数
passing a date to a function in python that is calling sql server
我正在尝试将日期 1 和日期 2 传递给 python 中的函数,该函数从 sql 服务器
创建数据框
import datetime as dt
import pandas as pd
import pyodbc
import sqlalchemy
from pandas import Series,DataFrame
cnx=sqlalchemy.create_engine("mssql+pyodbc://Omnius:MainBrain1@172.31.163.135:1433/Basis?driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0")
def func1(date1,date2):
sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between '"+date1+"' and '"+date2+"'"
df=pd.read_sql(sqlquery,cnx)
当我尝试从 ipython
调用此函数时
func1(dt.date(2015,05,01),dt.date(2015,05,02))
----> 8 sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between '"+date1+"' and '"+date2+"'"
TypeError: cannot concatenate 'str' and 'datetime.date' objects
我应该如何调用该函数才能避免出现类型错误。
sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between :date1 and :date2"
df=pd.read_sql(sqlquery,cnx, params=dict(date1=date1, date2=date2))
如果您的驱动程序不支持命名占位符,则像以前一样使用问号并将 [date1, date2] 列表作为参数值传递给参数。
这应该可以帮助您入门。除非日期格式匹配,否则您的 SQL 可能无法使用。在 CLI 中打印出 sqlquery 和测试。
转换示例:
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')
def func1(date1,date2):
strDate1 = date1.strftime('%m/%d/%Y')
strDate2 = date2.strftime('%m/%d/%Y')
sql = "select top 10000 * from Pretty_Txns where Pay_Date > '%s' and Pay_Date < '%s' " % (strDate1, strDate2)
return sql
sqlquery = func1( DateOne,DateTwo )
#print sqlquery.
df=pd.read_sql(sqlquery,cnx)
我正在尝试将日期 1 和日期 2 传递给 python 中的函数,该函数从 sql 服务器
创建数据框 import datetime as dt
import pandas as pd
import pyodbc
import sqlalchemy
from pandas import Series,DataFrame
cnx=sqlalchemy.create_engine("mssql+pyodbc://Omnius:MainBrain1@172.31.163.135:1433/Basis?driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0")
def func1(date1,date2):
sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between '"+date1+"' and '"+date2+"'"
df=pd.read_sql(sqlquery,cnx)
当我尝试从 ipython
调用此函数时 func1(dt.date(2015,05,01),dt.date(2015,05,02))
----> 8 sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between '"+date1+"' and '"+date2+"'"
TypeError: cannot concatenate 'str' and 'datetime.date' objects
我应该如何调用该函数才能避免出现类型错误。
sqlquery = "select top 10000 * from Pretty_Txns where Pay_Date between :date1 and :date2"
df=pd.read_sql(sqlquery,cnx, params=dict(date1=date1, date2=date2))
如果您的驱动程序不支持命名占位符,则像以前一样使用问号并将 [date1, date2] 列表作为参数值传递给参数。
这应该可以帮助您入门。除非日期格式匹配,否则您的 SQL 可能无法使用。在 CLI 中打印出 sqlquery 和测试。
转换示例:
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')
def func1(date1,date2):
strDate1 = date1.strftime('%m/%d/%Y')
strDate2 = date2.strftime('%m/%d/%Y')
sql = "select top 10000 * from Pretty_Txns where Pay_Date > '%s' and Pay_Date < '%s' " % (strDate1, strDate2)
return sql
sqlquery = func1( DateOne,DateTwo )
#print sqlquery.
df=pd.read_sql(sqlquery,cnx)