2015-02-24 18 views
7

Próbowałem wstawić pole (title) z PyMySQL, które może być NULL lub ciąg. Ale to nie działa.PyMySQL Insert NULL lub String

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

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

Ten kod wstawia None do bazy danych. Jeśli usunąć podwójny cudzysłów wokół pierwszej %s, zgłasza błąd:

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

Co mogę zrobić, aby wstawić NULL?

Odpowiedz

15

1) Nigdy nie używaj formatowania ciągów dla SQL.

2) Spróbuj wykonać następujące czynności:

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

niesamowite! Juz ok. Wielkie dzięki! – Cronos87

+0

Co masz na myśli mówiąc "Nigdy nie używaj formatowania ciągów dla sql"? Jestem początkującym mysql, robiąc coś podobnego do OP. – ScheissSchiesser

+1

@ScheissSchiesser, może to doprowadzić do iniekcji sql. Więc lepiej jest użyć wiązania parametrów jak w przykładowym kodzie powyżej – Retard

-1

zmienić kodu:

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

umm, ok, prawie taka sama odpowiedź rok później – Kirby

Powiązane problemy