使用 pyodbc 在 Access 中处理日期时出现 "Too few parameters" 错误
Working with dates in Access using pyodbc giving "Too few parameters" error
我正在使用 Python 和 pyodbc 导入。
我正在使用 Microsoft Office 2013 64 位。
我正在尝试查询一个 accdb 数据库以获取一个范围内 select 个不同的日期,并将它们分配给一个游标,这样我就可以将它们附加到一个列表中。
我的 Access 数据库有一个名为 Closing_prices 的 table 和一个名为 Date_ 的列,其数据类型为 "Date/Time".
我的代码如下:
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 查询更陌生,所以有人可以指出我哪里出错了,也许我可以如何更改我的代码以帮助我追加根据需要将不同的日期放入列表中。
非常感谢。
到
- 免去寻找适用日期分隔符的麻烦,
- 促进良好的编码习惯
您应该像这样简单地使用参数化查询:
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)
我正在使用 Python 和 pyodbc 导入。
我正在使用 Microsoft Office 2013 64 位。
我正在尝试查询一个 accdb 数据库以获取一个范围内 select 个不同的日期,并将它们分配给一个游标,这样我就可以将它们附加到一个列表中。
我的 Access 数据库有一个名为 Closing_prices 的 table 和一个名为 Date_ 的列,其数据类型为 "Date/Time".
我的代码如下:
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 查询更陌生,所以有人可以指出我哪里出错了,也许我可以如何更改我的代码以帮助我追加根据需要将不同的日期放入列表中。
非常感谢。
到
- 免去寻找适用日期分隔符的麻烦,
- 促进良好的编码习惯
您应该像这样简单地使用参数化查询:
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)