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

Python:pyodbc,Microsoft Access:表中的更新日期,参数太少,python,sql,ms-access,Python,Sql,Ms Access,正在使用的版本: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 = ''' SELEC

正在使用的版本:
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。错误:('07002',[07002],[Microsoft][ODBC Microsoft Access驱动程序]参数太少。应为3

您需要将字段名用空格“括起来”(或者更好:避免使用空格):

或者纠正打字错误:

SELECT * FROM view_price_list WHERE SuppID = ? and Price_List_Date = ?
您需要将字段名用空格“括起来”(或者更好:避免使用空格):

或者纠正打字错误:

SELECT * FROM view_price_list WHERE SuppID = ? and Price_List_Date = ?

与下面的大多数关系数据库不同,MS Access SQL()不对表或列等标识符使用双引号。在Access(如Python)中,双引号相当于用单引号括住字符串文本

因此,必须使用空格或特殊字符转义标识符
?!@$%^&*()或匹配符。或者使用方括号,这是与SQL Server和SQLite共享的功能:

sql = '''SELECT * FROM view_price_list 
         WHERE SuppID = ? and [Price List Date] = ?
      '''
或者使用backticks(与MySQL共享的功能):

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

与下面的大多数关系数据库不同,MS Access SQL()不对表或列等标识符使用双引号。在Access(如Python)中,双引号相当于用单引号括住字符串文本

因此,必须使用空格或特殊字符转义标识符
?!@$%^&*()或匹配符。或者使用方括号,这是与SQL Server和SQLite共享的功能:

sql = '''SELECT * FROM view_price_list 
         WHERE SuppID = ? and [Price List Date] = ?
      '''
或者使用backticks(与MySQL共享的功能):

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

MS Access不使用双引号作为标识符。使用方括号或倒勾来转义空格和特殊字符。MS Access不使用双引号作为标识符。使用方括号或倒勾来转义空格和特殊字符。多亏了这一点,我修复了它,我的代码中的其他地方出现了一个问题,使这部分似乎无法正常工作ut现在一切都好。再次感谢。感谢修复了它,我的代码中的其他地方出现了一个问题,使它看起来好像这部分不工作,但现在一切都好了。再次感谢。@Parfait:谢谢。它们是复制粘贴的剩余部分。更正。@Parfait:谢谢。它们是复制粘贴的剩余部分。更正。