2015-02-24 13 views
7

Ho provato a inserire un campo (title) con PyMySQL che può essere NULL o una stringa. Ma non funziona.PyMySQL Inserisci NULL o una stringa

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

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

Questo codice inserisce None nel database. Se rimuovo le virgolette intorno alla prima %s, si genera un errore:

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

Cosa posso fare per inserire NULL?

risposta

15

1) Non utilizzare mai la formattazione di stringhe per SQL.

2) Provare quanto segue:

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

Impressionante! Va bene ora. Molte grazie! – Cronos87

+0

Cosa intendi quando dici "Non utilizzare mai la formattazione di stringhe per sql"? Sono un principiante di mysql, facendo qualcosa di simile all'OP. – ScheissSchiesser

+1

@ScheissSchiesser, può portare a SQL injection. Quindi è meglio usare il binding di parametri come nell'esempio di codice sopra – Retard

-1

modificare il codice in questo modo:

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

umm, ok, praticamente la stessa risposta un anno dopo – Kirby