1. 程式人生 > >解決Not all parameters were used in the SQL statement問題

解決Not all parameters were used in the SQL statement問題

使用Python3連線MySQL資料庫,執行INSERT語句時,遇到Not all parameters were used in the SQL statement錯誤,通常是由於沒有正確使用MySQL的佔位符導致的。

vals = ('C', '製造業', 35, '專用裝置製造業', 600031, '三一重工')
cur.execute('''INSERT INTO industry_csrc 
        (category_code, category_name, industry_code, industry_name, company_code, company_name)
        VALUES (%s, %s, %d, %s, %d, %s)
 ''',  vals)

以上程式碼會執行出錯,因為無論是數字(包括整數和浮點數)、字串、日期時間或其他任意型別,都應該使用%s佔位符。
修改上面的程式碼,可正確執行:

vals = ('C', '製造業', 35, '專用裝置製造業', 600031, '三一重工')
cur.execute('''INSERT INTO industry_csrc 
        (category_code, category_name, industry_code, industry_name, company_code, company_name)
        VALUES (%s, %s, %s, %s, %s, %s)
 ''',  vals)

MySQL的引數標記與Python格式化字串中使用的%s看起來相同,但這種關係只是巧合,其他資料庫通常使用?來作為引數標記。

Note that the parameter markers used by mysql.connector may look the same as the %s used in Python string formatting but the relationship is only coincidental. Some database adapters like oursql and sqlite3 use ? as the parameter marker instead of %s.