Pyodbc:插入MS Access数据库时出现问题

时间:2019-08-07 22:04:09

标签: python ms-access pyodbc

我正在尝试从在线表单的结果中自动收集数据,将其编译为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表示要插入的值,我会理解的。

我的其他脚本使用完全相同的代码,但将数据正确插入数据库中。我觉得我的语法一定有问题,但是一周来的大部分时间里我一直在寻找它,但是没有运气。我希望新鲜的眼睛会有所帮助。

谢谢!

0 个答案:

没有答案