简体   繁体   中英

pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 9. (-3010) (SQLExecDirectW)')

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:/flame/meysam.accdb;')
cursor_2 = conn.cursor()

cursor_2.execute('''
                INSERT INTO normal (data_norm_x1, data_norm_x2, data_norm_x3,data_norm_t1,data_norm_t2,data_norm_t3,data_norm_d1,data_norm_d2,data_norm_d3)
                VALUES(norm_x1, norm_x2,norm_x3,norm_t1,norm_t2,norm_t3,norm_d1,norm_d2,norm_d3)

              ''')

conn.commit()

This is how I do it.

# insert data into 2 fields in a table    
import pyodbc

conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\your_path\\Test.accdb;')
cursor = conn.cursor()

cursor.execute(''' INSERT INTO Table1 (ID, Initials)
                    VALUES(1, 'RMS')  ''')

conn.commit()

Simply pass your Python values into SQL using parameters. Remember SQL is a special purpose that is layered in a general purpose language like Python. The two layers do not naturally talk to each others' environments so we must pass in or receive data by interfacing with a DB-API like pyodbc .

Specifically, Access SQL does not know what the 9 norm variables you use in VALUES clause. Consequently, it errs out on missing parameters. So pass parameters accordingly to ? placeholders.

# PREPARED STATEMENT WITH Q MARK PLACEHOLDERS
sql = """INSERT INTO normal (data_norm_x1, data_norm_x2, data_norm_x3,
                             data_norm_t1, data_norm_t2, data_norm_t3, 
                             data_norm_d1, data_norm_d2, data_norm_d3)
         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
      """

# RUN ACTION QUERY AND BIND TUPLE OF PARAMS TO SQL
cursor_2.execute(sql, (norm_x1, norm_x2, norm_x3, 
                       norm_t1, norm_t2, norm_t3, 
                       norm_d1, norm_d2, norm_d3)
                )
conn.commit()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM