Использование операторов Microsoft Access SQL в Python ODBC

Краткая версия: когда я пытаюсь использовать функцию DatePart Access через ODBC, ее невозможно разрешить.

Более длинная версия:

У меня есть запрос Microsoft Access, который возвращает строки с отметкой времени и оценкой. Я хочу отсортировать его по дню, а затем по счету - по сути, таблица рекордов за день.

Из-за отсутствия лучшей функции я использовал функцию DatePart для извлечения каждого года, месяца и дня из временной метки, а затем ORDER BY их, а затем Score.

В Microsoft Access запрос работает прекрасно.

Тем не менее, когда я использую pyodbc для доступа к тому же запросу, драйвер ODBC ставит функцию DatePart в тупик и считает, что это имя отсутствующего параметра.

Что меня поразило, так это то, что даже если я скрыл функцию DatePart, создав новый запрос HighScore, а затем SELECT * FROM HighScore, он все равно жаловался, что не может найти параметр. По-видимому, SQL запроса разрешается довольно поздно.

Мой вопрос:

  • Как разрешить функцию DatePart в SQL, чтобы 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)')

person Oddthinking    schedule 18.10.2010    source источник
comment
Вам нужно будет предоставить некоторый исходный код и точные сообщения об ошибках, которые вы получили от pyodbc.   -  person John Machin    schedule 18.10.2010


Ответы (2)


Вы уверены, что использование кавычек "yyyy" вместо апострофов 'yyyy' допустимо для этого диалекта SQL?

person John Machin    schedule 18.10.2010
comment
Спасибо. Собственно проблема. - person Oddthinking; 18.10.2010

Дата и время хранятся в доступе как числа с плавающей запятой. Число слева от запятой — это дата, дробная часть справа от запятой — это время (выраженное в долях дня, т. е. 0,5 = полдень).

Если вы хотите отсортировать по дням, вы можете просто использовать функцию Int(), чтобы вернуть целочисленную часть поля даты и времени.

person mwolfe02    schedule 18.10.2010
comment
Приятно знать. Я могу вернуться к этому, чтобы сделать код проще. Спасибо. - person Oddthinking; 18.10.2010
comment
Помимо упрощения, это также должно сделать его намного быстрее. - person mwolfe02; 18.10.2010