我只是想在特定的日期范围内查询SQLServer
数据库。不知怎的,我自己无法弄明白。这是我做的:
import pyodbc
import pandas as pd
con = pyodbc.connect("Driver={SQL Server}; Server=link")
tab = pd.read_sql_query("SELECT * FROM OPENQUERY(aaa, 'SELECT * FROM bbb.ccc WHERE number like (''K12345%'')')",con)
tab['DT']
0 2015-09-17 08:51:41
1 2015-09-17 09:14:09
2 2015-09-17 09:15:03
3 2015-09-24 15:20:55
4 2015-09-24 15:23:47
5 2015-10-02 08:49:59
6 2015-10-30 14:08:40
7 2015-10-30 14:13:38
8 2015-11-03 14:30:06
9 2015-11-03 14:30:22
10 2015-11-04 07:14:40
11 2015-11-04 10:43:51
Name: DT, dtype: datetime64[ns]
现在我想我应该可以使用以下查询选择2015-09-18
和2015-10-02
之间日期的记录。不知怎的,它失败了,错误
DatabaseError:sql上执行失败:SELECT * FROM OPENQUERY(aaa,' SELECT * FROM bbb.ccc WHERE DT'           和' 2015-10-02'')"。
有人可以帮助解释我做错了吗?
tab2 = pd.read_sql_query("SELECT * FROM OPENQUERY(aaa, 'SELECT * FROM bbb.ccc `WHERE DT between ''2015-09-18'' and ''2015-10-02''')",con)`
答案 0 :(得分:0)
您应该使用parameter binding:
tab2 = pd.read_sql_query("SELECT * FROM bbb.ccc WHERE DT between ? and ?", con, params=['2015-09-18', '2015-10-02'])
?
是您从列表中传递的值的占位符。 ?
的数量必须与列表中的商品数量相匹配。
我不确定为什么SELECT *
包裹在另一个SELECT *
中,所以我简化了最里面的选择。