2015-02-24 3 views
7

Ich habe versucht, ein Feld (title) mit PyMySQL, die NULL oder eine Zeichenfolge sein kann. Aber es funktioniert nicht.PyMySQL Einfügen NULL oder ein String

query = """ 
    INSERT INTO `chapter` (title, chapter, volume) 
    VALUES ("%s", "%s", %d) 
""" 

cur.execute(query % (None, "001", 1)) 
cur.execute(query % ("Title", "001", 1)) 

Dieser Code fügt None in die Datenbank ein. Wenn ich das doppelte Anführungszeichen um den ersten %s entfernen, wirft er einen Fehler:

pymysql.err.InternalError: (1054, "Unknown column 'None' in 'field list'") 

Was kann ich NULL einfügen?

Antwort

15

1) Verwenden Sie niemals die Zeichenfolgenformatierung für SQL.

2) Versuchen Sie Folgendes:

query = """ 
INSERT INTO `chapter` (title, chapter, volume) 
VALUES (%s, %s, %s) 
""" 
cur.execute(query, (None, "001", 1)) 
+0

Awesome! Es ist jetzt okay. Danke vielmals! – Cronos87

+0

Was meinen Sie, wenn Sie sagen "Verwenden Sie nie String-Formatierung für SQL"? Ich bin ein Mysql-Anfänger und mache etwas Ähnliches wie das OP. – ScheissSchiesser

+1

@SeissSchiesser, kann es zu SQL-Injektion führen. So ist es besser, Parameterbindung wie im Codebeispiel über – Retard

-1

Ändern Sie den Code wie folgt aus:

query = """INSERT INTO chapter(title, chapter, volume) VALUES (%s, %s, %s)""" 
cur.execute(query, (None, "001", 1)) 
connection.commit() 
+2

Umm, ok, ziemlich genau die gleiche Antwort ein Jahr später – Kirby