简短版本:当我尝试通过ODBC使用Access的DatePart函数时,无法解析。
更长的版本:
我有一个Microsoft Access查询,它返回带有时间戳和分数的行。我希望按天排序,然后按分数排序 - 实际上是当天的高分表。
由于缺少更好的功能,我使用DatePart
函数从时间戳中提取年,月和日,并ORDER BY
跟随分数。
在Microsoft Access中,查询效果很好。
但是,当我使用pyodbc
访问同一个查询时,ODBC驱动程序被DatePart函数难倒,并认为它是缺少参数的名称。
令我感到惊讶的是,即使我隐藏了DatePart功能,通过创建新的HighScore查询,然后SELECT * FROM HighScore
,它仍然抱怨它无法找到参数。显然,查询的SQL在这个过程中得到了很晚的解决。
我的问题是:
添加了其他信息:
似乎有点矫枉过正,但这里有一些代码:
import pyodbc
access_db_path = r"<ellided>"
connection_string = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+access_db_path
connection = pyodbc.connect(connection_string, autocommit = True)
print "First query"
connection.cursor().execute('SELECT ScoreTime FROM SplitExtendedP1')
print "Worked"
print "Second query"
print connection.cursor().execute('SELECT DatePart("yyyy",ScoreTime) FROM SplitExtendedP1')
print "Doesn't get here."
结果如下:
First query
Worked
Second query
Traceback (most recent call last):
File "<ellided>.py", line 16, in <module>
print connection.cursor().execute('SELECT DatePart("yyyy", ScoreTime) FROM SplitExtendedP1')
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')
答案 0 :(得分:2)
您确定使用引号"yyyy"
而不是撇号'yyyy'
在SQL的方言中是否有效?
答案 1 :(得分:2)
日期时间作为浮点数存储在访问中。小数点左边的数字是日期,小数点右边的小数部分是时间(用一天的一小部分表示;即.5 =中午)。
如果要按日排序,只需使用Int()函数返回datetime字段的整数部分即可。