在Python ODBC中使用Microsoft Access SQL运算符
简短版本:我在通过ODBC使用Access的DatePart函数时遇到了问题,它无法被识别。
详细版本:
我有一个Microsoft Access的查询,它返回带有时间戳和分数的行。我想按日期排序,然后再按分数排序——实际上就是一天的高分榜。
由于没有更好的函数,我使用了DatePart
函数来从时间戳中提取年份、月份和日期,然后用ORDER BY
对它们进行排序,接着是分数。
在Microsoft Access中,这个查询运行得非常顺利。
然而,当我使用pyodbc
来访问同样的查询时,ODBC驱动程序对DatePart函数感到困惑,认为它是一个缺失参数的名称。
让我感到惊讶的是,即使我隐藏了DatePart函数,通过创建一个新的HighScore查询,然后用SELECT * FROM HighScore
,它仍然抱怨找不到这个参数。显然,查询的SQL在处理过程中被解析得比较晚。
我的问题是:
- 我该如何在SQL中解决DatePart函数,以便Access能够运行它,或者
- 通过ODBC按时间戳的日期部分排序的正确方法是什么?
附加信息:
这看起来有点复杂,但这里有一些代码:
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)')
2 个回答
2
在Access数据库中,日期和时间是以浮点数的形式存储的。小数点左边的数字代表日期,而小数点右边的部分则表示时间(这个时间是以一天的分数来表示的;比如,.5 就代表中午12点)。
如果你想按照日期进行排序,可以直接使用Int()函数,这个函数会返回日期时间字段的小数点左边的整数部分。
2
你确定在那个SQL方言中,用双引号"yyyy"
代替单引号'yyyy'
是有效的吗?