Quelqu'un pourrait-il m'expliquer s'il s'agit d'un bug ou d'une fonctionnalité?MariaDB executemany sur une clé dupliquée dans Debian Stretch
- extensible Debian
- MariaDB-server-10.1.26
- MariaDB-client-10.1.26
- MySQLdb-1.2.5
Ce code python fonctionne perfectlly dans Debian Jessie , mais échoué dans Stretch avec erreur:
Traceback (most recent call last):
File "bug_check.py", line 17, in <module>
cur.executemany(q, p)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 255, in executemany
self.errorhandler(self, TypeError, msg)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
TypeError: not all arguments converted during string formatting
Code Python:
#!/usr/bin/python
# -*- coding: UTF-8 *
import MySQLdb
db = MySQLdb.connect(host='192.168.1.183', user='root', passwd='password', db='test', charset='utf8')
cur = db.cursor()
q = """INSERT INTO test2 (id, value)
VALUES (%s, %s)
ON DUPLICATE KEY
UPDATE value=%s
"""
p = [(1, 7, 7)]
# failed
cur.executemany(q, p)
# working
for i in p:
cur.execute(q, i)
db.commit()
db.close()
Base de données:
CREATE TABLE `test2` (
`id` bigint(8) NOT NULL,
`value` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `test2`
ADD PRIMARY KEY (`id`);
ALTER TABLE `test2`
MODIFY `id` bigint(8) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
Je suis en train MariaDB-10.2, mais de toute façon pymysql erreur se produit en stretch.
Merci beaucoup! Il travaille: '' 'INSERT INTO test2 (id, valeur) VALEURS (% s,% s) Duplicate CLÉS valeur UPDATE = VALEURS (valeur)' '' Mais je ne comprends pas pourquoi le même code fonctionne dans Wheezy et Jessie mais ne fonctionne pas dans Stretch. J'ai les mêmes versions de MySQLdb/pymysql. Possible 'mariadb-client-10.1' a des changements incompatibles avec' mariadb-client-10.1'. Mais je n'ai pas pu trouver quelque chose d'info. –
Je pense que le code est entièrement du côté client. On dirait que Stretch est buggé? Mais c'est un nom d'OS, correct? L'OS ne devrait pas être impliqué. Si c'est dans Buster, écrivez un rapport de bogue sur Debian. –