Python:pyodbc,Microsoft Access:表中的更新日期,参数太少

时间:2019-01-14 15:29:42

标签: python sql ms-access

使用的版本:python 3.7.2rc1Microsoft Access 2003

我正在尝试根据ID和日期获取特定记录。如果我删除日期参数,它可以正常工作。但是使用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驱动程序]参数太少。预期为3

2 个答案:

答案 0 :(得分:2)

您需要用空格将括号中的字段名称“括起来”(或者最好:避免使用这些字符):

col.lab

或者纠正错误:

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

答案 1 :(得分:0)

不同于ANSI SQL-1992之后的大多数关系数据库,MS Access SQL(generally ANSI -89 Level 1 compliant)不会对表或列之类的标识符使用双引号。在Access(如Python)中,双引号等效于单引号以将字符串文字括起来。

因此,您必须转义带有空格或特殊字符?!@#$%^&*()_+或匹配reserved words的标识符。要么使用方括号,即与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` = ?
      '''