sql >> Base de Datos >  >> RDS >> Mysql

pymysql callproc() parece afectar las selecciones posteriores

Tengo un problema similar con las declaraciones INSERT (comprometidas) que no aparecen en la base de datos. PyMySQL 0.5 para Python 3.2 y MySQL Community Server 5.5.19.

Encontré la solución para mí:en lugar de usar el método execute(), usé el método executemany, explicado en la referencia del módulo en http://code.google.com/p/pymssql/wiki/PymssqlModuleReference También hay un enlace a ejemplos.

Actualizar Un poco más tarde, hoy, descubrí que esta aún no es la solución completa. Una salida demasiado rápida () al final del script de python hace que los datos se pierdan en la base de datos. Entonces, agregué un time.sleep () antes de cerrar la conexión y antes de salir () del script, ¡y finalmente aparecieron todos los datos! (También cambié a usar una tabla 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()

Sugiero el foro/grupo https://groups.google.com/forum /#!forum/pymysql-users para más discusión con el desarrollador.