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

标签 mysql parameters executemany

感谢您阅读我的帖子。

我想做一件简单的事情:从一个数据库获取信息并注入(inject)另一个数据库。

PRAGMA_fl_product = ACCESS_cursor.execute('选择 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”转义条目,但似乎错过了一些东西。

最佳答案

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

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): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%(b)s' at line 1

据此我得出结论,连接器在更新后无法识别参数。所以我的解决方法是:

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)"

关于mysql - 并非所有参数都在 SQL 语句中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533023/

相关文章:

php/mysql - 向 MySQL 发送多个数据

c# - Entity Framework Code-First 启动时太慢

parameters - 如何先验选择决策树算法的参数?

Python requests 模块 - 将嵌套 XML 作为查询参数传递

python - 混合占位符、executemany 和表名

python - 使用 MySQLdb 插入 MySQL - python

php - 使用PHP从数据库中删除评论

java - JX日期选择器 :unpearsable date

powershell - 动态参数 - 使用 Dynamic ValidateSet

python - 在 python sqlite3 模块中导入数据文件(如.csv)的任何其他方式? [不一一插入]