我正在尝试从在线表单的结果中自动收集数据,将其编译为Excel文件,然后将数据从Excel文件上载到Access中。我有一个Python脚本可以对另一个数据库执行此操作,并且可以正常工作,但是由于某些原因,相同的代码对新数据库不起作用。
使用pydobc,我能够成功连接到数据库并执行简单的SELECT和INSERT语句,例如:
DBcursor.execute("insert into Table1(Field1, Field2) values(?, ?)", ('Test 3', 'Test 4'))
已正确将其插入数据库,并且不会引发异常。但是,以下代码不会:
sql = "insert into [Wufoo Form Data](" # Start of string
for c in columns: # Concatenate all column names in string
if c == columns[len(columns)-1]: # for valid insert statement
sql += c
else:
sql += c + ", "
sql += ") values(" + values + ")" # Insert string of ?s equal to number of
# values in insert statement (final variable) `
errors = 0
for row in excelResults: # Insert data row by row
#try: # Try block to skip duplicate keys
# and count number of invalid entries
DBcursor.execute(sql, row) # ERROR OCCURS HERE
#except:
errors += 1 # If key already exists, add one to error
DBconn.commit() # Commit all SQL statements in DBcursor
return errors # Return number of errors for suer feedback
我使用for循环将值连接在一起以创建我的sql插入字符串。当代码到达DBcursor.execute(sql, row)
时,这些值为以下值:
sql = "insert into [Wufoo Form Data]([Entry Id], [First Name], [Last Name], [ID Number], Email, Employee, Student, [Start Date], [End Date], [Signed First], [Signed Last], [Today's Date], [Date Created], [Created By], [Last Updated], [Updated By], [IP Address], [Last Page Accessed], [Completion Status]) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
row = ('1', 'Test', 'Form', '1234567', 'email@server.com', 'Access (on ID card)', None, '2019-07-31', '2019-08-15', 'Test', 'Form', '2019-08-01 17:58:05', 'public', None, None, None, None, None, None)
但是,这是我得到的错误:('The SQL contains 0 parameter markers, but 19 parameters were supplied', 'HY000')
,如果我没有使用?s表示要插入的值,我会理解的。
我的其他脚本使用完全相同的代码,但将数据正确插入数据库中。我觉得我的语法一定有问题,但是一周来的大部分时间里我一直在寻找它,但是没有运气。我希望新鲜的眼睛会有所帮助。
谢谢!