在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误

Posted

技术标签:

【中文标题】在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误【英文标题】:Working with dates in Access using pyodbc giving "Too few parameters" error 【发布时间】:2015-02-17 18:07:07 【问题描述】:

我正在使用带有 pyodbc 导入的 Python。

我使用的是 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 查询也比较陌生,所以有人可以指出我哪里出错了,也许我可以如何更改我的代码来帮助我根据需要将不同的日期附加到列表中。

非常感谢。

【问题讨论】:

如果直接在 Access 中运行查询,是否按预期工作? 是的,当我使用: select distinct Date_ FROM Closing_prices where Date_ >= #10/8/2011# and Date_ 【参考方案1】:

    省去查找适用日期分隔符的麻烦,并且 促进良好的编码实践

您应该像这样简单地使用 参数化查询

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)

【讨论】:

Gord Thomson 非常感谢你,效果很好!!这使得您现在已经多次帮助我解决不同的问题......我非常感谢您的时间。问候。 @GordThomson 我已经提出了以下问题***.com/questions/28591632/…,这与这个问题密切相关——我已经在 2 个 SQL 查询中成功实施了你的建议,但是在第三个查询中遇到了问题——无论如何你可以好心看一眼?一如既往地感激...问候。

以上是关于在 Access 中使用 pyodbc 处理日期,给出“参数太少”错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyodbc 将带日期的数据上传到 MS Access 数据库

如何使用 pyodbc 执行保存在 MS Access 中的查询

无法使用 pyodbc 在 Access 数据库的表中插入/更新长文本字段

使用 Python/pyodbc 插入 Access DB

使用 Pyodbc 在 MS Access 表中写入新行的问题

使用 Access 和 pyodbc 的 INSERT 语句中的语法错误