Python: pyodbc, Microsoft Access: даты обновления в таблице, слишком мало параметров - PullRequest
0 голосов
/ 14 января 2019

Используемые версии: python 3.7.2rc1 и Microsoft Access 2003

Я пытаюсь получить конкретную запись на основе идентификатора и даты. Если я удаляю параметры даты, он работает нормально. Но используя переменную mydate, я получаю ошибку, как показано ниже.

price_list__only = date_out[0]
#print('pricelist = '+str(price_list__only))
mydate = datetime.date(2018, 12, 1)
#print(mydate)

sql = '''
SELECT * FROM view_price_list WHERE SuppID = ? and "Price List Date" =     ?
'''
parmeters = (price_list__only, mydate)
cursor.execute(sql,parmeters)

Вывод ошибки: pyodbc.Error: ('07002', [07002], [Microsoft] [ODBC Microsoft Access Driver] Слишком мало параметров. Ожидается 3

Ответы [ 2 ]

0 голосов
/ 15 января 2019

В отличие от большинства реляционных баз данных, следующих за ANSI SQL-1992 , MS Access SQL ( обычно соответствует стандарту ANSI -89 уровня 1 ) не использует двойные кавычки для идентификаторов, таких как таблицы или столбцы. В Access (например, Python) двойные кавычки эквивалентны одинарным кавычкам для включения строковых литералов.

Следовательно, вы должны экранировать идентификаторы с пробелами или специальными символами ?!@#$%^&*()_+ или соответствующими зарезервированными словами . Либо используйте квадратные скобки, функция, общая для SQL Server и SQLite:

sql = '''SELECT * FROM view_price_list 
         WHERE SuppID = ? and [Price List Date] = ?
      '''

Или используйте обратные пометки, функция, совместно используемая в MySQL:

sql = '''SELECT * FROM view_price_list 
         WHERE SuppID = ? and `Price List Date` = ?
      '''
0 голосов
/ 14 января 2019

Вам необходимо заключить в скобки имена полей с пробелами (или лучше: избегайте их):

SELECT * FROM view_price_list WHERE SuppID = ? and [Price List Date] = ?

или, возможно, исправьте опечатки:

SELECT * FROM view_price_list WHERE SuppID = ? and Price_List_Date = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...