Mysql
 sql >> Datenbank >  >> RDS >> Mysql

pymysql callproc() scheint nachfolgende Auswahlen zu beeinflussen

Ich habe ein ähnliches Problem mit (festgeschriebenen) INSERT-Anweisungen, die nicht in der Datenbank erscheinen. PyMySQL 0.5 für Python 3.2 und MySQL Community Server 5.5.19.

Ich habe die Lösung für mich gefunden:Anstatt die Methode execute() zu verwenden, habe ich die Methode executemany verwendet, die in der Modulreferenz auf http://code.google.com/p/pymssql/wiki/PymssqlModuleReference Es gibt auch einen Link zu Beispielen.

Aktualisieren Etwas später, heute, fand ich heraus, dass dies noch nicht die vollständige Lösung ist. Ein zu schnelles exit() am Ende des Python-Skripts führt dazu, dass die Daten in der Datenbank verloren gehen. Also fügte ich eine time.sleep() hinzu. vor dem Schließen der Verbindung und vor dem Beenden des Skripts, und schließlich erschienen alle Daten! (Ich wechselte auch zur Verwendung einer myisam-Tabelle)

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

Ich schlage das Forum/die Gruppe https://groups.google.com/forum vor /#!forum/pymysql-users für weitere Diskussionen mit dem Entwickler.