簡體   English   中英

pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 參數太少。預期為 9。(-3010) (SQLExecDirectW)')

[英]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()

我就是這樣做的。

# 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()

只需使用參數將 Python 值傳遞到 SQL 中即可。 請記住,SQL 是一種特殊用途,它以 Python 等通用語言分層。 這兩層不會自然地與彼此的環境對話,因此我們必須通過與像pyodbc這樣的 DB-API 接口來傳遞或接收數據。

具體來說,Access SQL 不知道您在VALUES子句中使用的 9 個規范變量是什么。 因此,它會因缺少參數而出錯。 那么相應地將參數傳遞給? 占位符。

# 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM