使用pyodbc处理Access中的日期"参数太少"错误

时间:2015-02-17 18:07:08

标签: python sql ms-access ms-access-2013 pyodbc

我正在使用Python进行pyodbc导入。

我使用的是Microsoft Office 2013 64位。

我正在尝试查询accdb数据库以选择范围内的不同日期并将它们分配给游标,以便我可以将它们附加到列表中。

我的Access数据库有一个名为Closing_prices的表,以及一个名为Date_的列,其数据类型为"日期/时间"。

我的代码如下:

cursor=conx.cursor()
query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011' and Date_ < '30/04/2014'"
cursor.execute(query)
dates=list()
for date in cursor:
   dates.append(date[0])

但是我收到错误消息:

Traceback (most recent call last):
  File "C:/Users/Stuart/PycharmProjects/untitled/Apache - Copy.py", line 20, in <module>
cursor.execute(query)
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')

由于Date_是日期时间,我也尝试过:

query="select distinct Date_ FROM Closing_prices where Date_ >= '10/8/2011 00:00:00' and Date_ < '30/04/2014 00:00:00'"

当我跑步时:

cursor = conx.cursor()
query="select Date_ FROM Closing_prices"
cursor.execute(query)

for row in cursor:
    print row

print type(row[0])

我得到以下输出作为示例:

(datetime.datetime(2014, 3, 24, 0, 0), )
(datetime.datetime(2014, 3, 25, 0, 0), )
(datetime.datetime(2014, 3, 26, 0, 0), )
(datetime.datetime(2014, 3, 27, 0, 0), )

我相对较新的Python甚至更新的SQL查询,所以有人可以指出我出错的地方,也许我可以改变我的代码以帮助我根据需要将不同的日期附加到列表中。 / p>

非常感谢。

1 个答案:

答案 0 :(得分:5)

  1. 省去了找到适用的日期分隔符的麻烦,
  2. 促进良好的编码实践
  3. 您应该只使用参数化查询,如下所示:

    db = pyodbc.connect(connStr)
    crsr = db.cursor()
    sql = """
    SELECT DISTINCT Date_ FROM Closing_prices WHERE Date_ >= ? AND Date_ < ?
    """
    params = (datetime.date(2011, 8, 10), datetime.date(2014, 4, 30))
    crsr.execute(sql, params)