erster Beitrag; Mir wurde oft geholfen von den Fragen anderer, aber jetzt bin ich völlig festgefahren.python mysqldb Daten einfügen ohne Fehler verdampfen
Ich arbeite in Python, mit MySQLdb (im Folgenden als 'mysql' importiert) und versuche, eine Einfügung zu tun. Dieser Code, der mit seiner eigenen Verbindung zum Debuggen isoliert ist, folgt unmittelbar einem vollständig erfolgreichen Einfügen in eine andere Tabelle in derselben Datenbank, wobei dieselbe Verbindung (vor dem Debuggen) verwendet wird.
import MySQLdb as mysql
from futuremachine import data
j = {};
return_id = 7201;
j['boxids'] = [u'28']
...
local_connection = data.environment('development');
local_db = mysql.connect(**local_connection);
local_curs = local_db.cursor();
if local_db.autocommit:
print "AUTOCOMMIT ON";
else:
print "EUREKA";
# insert the new set of labels
for label_id in j['boxids']:
query = """
insert into eventlabels values (%s, %s)
"""
args = [int(return_id),int(label_id)]
try:
#local_curs.execute(query,args);
data.executive(local_curs,query,args);
#local_db.commit()
except mysql.Error, e:
sys.exit("sql error:\n" + query + "\n%s" % e);
ci = local_db.info()
rc = local_db.affected_rows()
print "info: "+str(ci);
print "affected: "+str(rc);
local_db.close();
die 'data.executive' ein Wrapper curs.execute; Ich habe dies mit und ohne Wrapper zum selben Ergebnis versucht. return_id ist die Lastrowid von der vorherigen Einfügung, die jedes Mal funktioniert; Dummy-Werte sind oben angegeben.
die info() gibt None zurück; noch frustrierender, affected_rows() liefert 1.
Die Abfrage erzeugt keine Fehler, aber wenn ich die Tabelle nach den eingefügten Daten überprüfe, ist sie nicht da.
- autocommit ist eingeschaltet; Aufruf commit() hat unmittelbar keine Auswirkung
- die Verbindungs Benutzer überprüft Berechtigungen auf die Tabelle im System mysql.log
- die Abfrage erscheint
das alles ist, ich denke, dies umfassen kann einfügen hat Zeit. Alle Antworten, die ich gefunden habe, wurden von connection.commit() gelöst, was bisher nicht geholfen hat.
die Tabelle in Frage:
mysql> show full columns from eventlabels;
+---------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+---------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
| eventid | int(11) | NULL | NO | PRI | NULL | | select,insert,update,references | |
| labelid | int(11) | NULL | NO | PRI | NULL | | select,insert,update,references | |
+---------+---------+-----------+------+-----+---------+-------+---------------------------------+---------+
2 rows in set (0.00 sec)
Vielen Dank für jedes Licht Sie in der Lage sein können, auf diese zu vergießen.
Bitte geben Sie ein kleines Code-Snippet, das dieses Problem deutlich veranschaulicht ... dieser Code ist kein MVC (es beruht auf Variablen, die nicht im Code enthalten sind) –
ok, ich habe die Art der Variablen nicht explizit angegeben angegeben; irgendwelche Gedanken? in der Nähe, wie ich vielleicht die label_id als eine Unicode-String ist es nicht sauber zu Int konvertieren, außer jede Möglichkeit zu debuggen dies kann ich denke, hat keinen Hinweis darauf, dass dies ein Problem ist. –
Nun, ich gebe meine Datenbank-Anmeldeinformationen nicht aus, aber ich habe die Zeilen wie gewünscht hinzugefügt. arbeitet hier lokal, außer natürlich für das Fehlen von eingefügten Daten. irgendwelche Gedanken? - nicht sicher, was zu Ihrer vorherigen Antwort @JoranBeasley passiert ist, aber wie gewünscht dieser Code abgeschlossen ist (minus Login creds) –