Die Fehlermeldung, die ich bekam, war
%Vor%Als erstes überprüfte ich, ob die URL-Zeichenfolge länger als die Feldlänge ist, aber sie ist tatsächlich viel kürzer. Datenbankdesign
%Vor%Tabellendesign
%Vor%Ich drucke die Längen der Daten aus, die ich in die Tabelle einfügen möchte (ich teste nur mit einer URL):
%Vor% Ich benutzte einen Cursor, der von Django.db.connection erstellt wurde. Um informativer zu sein, füge ich den kompletten Datenbankabfragebefehl ein, den ich an cursor.execute()
Das Lustige ist, dass der obige Befehl funktioniert, wenn ich in die MySQL-Befehlszeile kopiere und einfüge. Keine Fehlermeldungen und die Daten werden nur korrekt eingefügt.
Was läuft falsch?
cursor.execute
behandelt MySQL, wenn Sie es korrekt verwenden. Einige Beispiele hier
Die Grundidee besteht darin, %s
in der Raw-SQL-Zeichenfolge zu verwenden, in der die Rohwerte enthalten sind, und dann ein zweites Argument an cursor.execute()
zu übergeben, das ein Tupel (oder Array) der Werte in der richtigen Reihenfolge ist. In Ihrem Fall würde dies wie folgt aussehen:
Sie sollten urllib.unquote(url)
ausprobieren, um die URL-Zeichenkette vor dem Einfügen in die db zu entfernen . Die Anführungszeichen-Markierung%, die in Ihrer Zeichenfolge vorkommt, ist ein Sonderzeichen für MySQL und kann Ihre Transaktion beeinträchtigen.
Ihr Beitrag sollte lauten:
%Vor%Beachten Sie, dass MySQL% nur in Musterkontexten als speziell behandelt. Also könnte am Ende hier etwas mit Django ORM nicht stimmen.