并非所有参数都在SQL语句中使用

时间:2015-12-30 16:11:13

标签: mysql parameters executemany

感谢您阅读我的帖子。

我想做一件容易的事:从一个数据库获取信息并注入另一个数据库。

PRAGMA_fl_product = ACCESS_cursor.execute('SELECT Prekes.PrekeID, Prekes.NomNr, AmburiaSandLik.Likutis, Prekes.PardKaina, AmburiaSandLik.Likutis, Prekes.PardKaina FROM Prekes INNER JOIN AmburiaSandLik ON Prekes.PrekeID=AmburiaSandLik.PrekeID;').fetchall()

flproduct="INSERT INTO fl_product (product_id, model, quantity, prices, status) VALUES ('%s', '%s', '%s', '%s', '1') ON DUPLICATE KEY UPDATE quantity='%s', price='%s'"
SQLcursor.executemany(flproduct, PRAGMA_fl_product)

这会引发错误:

SQLcursor.executemany(flproduct, PRAGMA_fl_product)
File "C:\Program Files (x86)\Python 3.5\lib\site-packages\mysql\connector\cursor.py", line 606, in executemany
stmt = self._batch_insert(operation, seq_params)
File "C:\Program Files (x86)\Python 3.5\lib\site-packages\mysql\connector\cursor.py", line 553, in _batch_insert
"Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

有人可以帮我理解我面临的问题吗?

我选择6列并尝试使用6'%s'逃避条目,但似乎错过了一些东西。

2 个答案:

答案 0 :(得分:1)

您的INSERT错误。

INSERT INTO fl_product
(product_id, model, quantity, prices)
VALUES
('%s'      , '%s' , '%s'    , '%s'  , 1)
ON DUPLICATE KEY UPDATE quantity='%s', price='%s'"

选择了5个值和4个列。数字为1的是什么?

答案 1 :(得分:1)

我发现了这个问题,因为我有类似的情况:

curs.execute('INSERT INTO tbl (a, b) VALUES (%s, %s) ON DUPLICATE KEY UPDATE b = %s', (1,2,2))

调用时出现同样的错误。当我将查询更改为命名参数时:

curs.execute('INSERT INTO tbl (a, b) VALUES (%(a)s, %(b)s) ON DUPLICATE KEY UPDATE b = %(b)s', {a: 1, b: 2})

这导致错误:

  

mysql.connector.errors.ProgrammingError:1064(42000):您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在'%(b)s'附近使用正确的语法。在第1行

由此我得出结论,连接器在UPDATE之后不识别参数。所以我的解决方法是:

curs.execute('INSERT INTO tbl (a, b) VALUES (%(a)s, %(b)s) ON DUPLICATE KEY UPDATE b = VALUES(b)', {a: 1, b: 2})

如果没有重复的键错误,那么使用VALUES函数来获取本应写入的新值。请参阅mysql docs

在您的情况下,这将是:

flproduct="INSERT INTO fl_product (product_id, model, quantity, prices, status) VALUES ('%s', '%s', '%s', '%s', '1') ON DUPLICATE KEY UPDATE quantity=VALUES(quantity), prices=VALUES(prices)"