使用的版本:python 3.7.2rc1
和Microsoft 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
答案 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` = ?
'''