Nie jest to całkowicie zaskakujące. W pierwszym przypadku wstawiasz predefiniowaną stałą Pythona Brak
To równa się SQL NULL
. W drugim przypadku wstawiasz do tabeli ciąg o nazwie „Brak”. Te dwie rzeczy są bardzo różne. Jeśli wstawisz ciąg do pola podwójnego lub zmiennoprzecinkowego, zobaczysz wszelkiego rodzaju błędy, najczęściej dokładnie ten, który widziałeś.
w pierwszej kolejności działa, ponieważ zadeklarowałeś:
`float8value` double DEFAULT NULL,
Akceptuje NULL, a None znajduje się na 8 miejscu na liście wartości. Gdy używanych jest wiele różnych parametrów, zawsze dobrym pomysłem jest użycie parametrów nazwanych, aby na pierwszy rzut oka było jasne, co jest powiązane z każdą kolumną.
Aktualizacje:
Po uruchomieniu kodu jedynym wnioskiem, do którego można dojść, jest to, że znalazłeś błąd, używając print(cursor.statement)
można odkryć, że wykonane zapytanie jest.
INSERT INTO runsettings (apcrunid,equipment,runnumber,wafer,settingname,intvalue,floatvalue,float8value)
VALUES (471285,'CT19',7,'271042','Etch Time Min',NULL,NULL,NULL),
(471285,'CT19',7,'00000','Etch Time Min',NULL,NULL,'None')
Nie powoduje to błędu, ale jeśli usuniesz pierwszy zestaw wartości, rzeczywiście wystąpi błąd. Zalecam złożenie raportu o błędzie