Mysql
 sql >> Base de données >  >> RDS >> Mysql

pymysql callproc() semble affecter les sélections suivantes

J'ai un problème similaire avec les instructions INSERT (commises) qui n'apparaissent pas dans la base de données. PyMySQL 0.5 pour Python 3.2 et MySQL Community Server 5.5.19.

J'ai trouvé la solution pour moi :au lieu d'utiliser la méthode execute(), j'ai utilisé la méthode executemany, expliquée dans la référence du module surhttp://code.google.com/p/pymssql/wiki/PymssqlModuleReference Il y a aussi un lien vers des exemples.

Mettre à jour Un peu plus tard, aujourd'hui, j'ai découvert que ce n'était pas encore la solution complète. Un exit() trop rapide à la fin du script python fait que les données se perdent dans la base de données. J'ai donc ajouté un time.sleep() avant de fermer la connexion et avant de quitter() le script, et enfin toutes les données sont apparues ! (Je suis également passé à l'utilisation d'une table myisam)

import pymysql
conn = pymysql.connect(host='localhost', user='root', passwd='', db='mydb', charset='utf8')
conn.autocommit(True)
cur = conn.cursor()

# CREATE tables (SQL statements generated by MySQL workbench, and exported with Menu -> Database -> Forward Engineer)
cur.execute("""
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `mydb` ;
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
# […]

SET [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_UNIQUE_CHECKS;

""")

# Fill lookup tables:

cur.executemany("insert into mydb.number(tagname,name,shortform) values (%s, %s, %s)", [('ЕД','singular','sg'), ('МН','plural','p')] )
cur.executemany("insert into mydb.person(tagname,name,shortform) values (%s, %s, %s)", [('1-Л','first','1st'), ('2-Л','second','2nd'), ('3-Л','third','3rd')] )
cur.executemany("insert into mydb.pos(tagname,name,shortform) values (%s, %s, %s)", [('S','noun','s'), ('A','adjective','a'), ('ADV','adverb','adv'), ('NUM','numeral','num'), ('PR','preposition','pr'), ('COM','composite','com'), ('CONJ','conjunction','conj'), ('PART','particle','part'), ('P','word-clause','p'), ('INTJ','interjection','intj'), ('NID','foreign-named-entity','nid'), ('V','verb','v')] )
#[…]

import time
time.sleep(3)
cur.close()
conn.close()
time.sleep(3)
exit()

Je suggère le forum/groupe https://groups.google.com/forum /#!forum/pymysql-users pour plus de discussion avec le développeur.