Использование операторов Microsoft Access SQL в Python ODBC - PullRequest
1 голос
/ 18 октября 2010

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

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

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

Чтобы получить лучшую функцию, я использовал функцию DatePart для извлечениякаждый из Года, Месяца и Дня из отметки времени, а затем ORDER BY, за которыми следует Оценка.

В 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)')

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

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

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

2 голосов
/ 18 октября 2010

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

...