kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn

Как сравнивать None Python и NULL SQLite?

Произвожу парсинг с занесением данных в БД, некоторые элементы при парсинге могут быть None, так они в базу и отправляются, при этом в базу они заносятся как NULL. Проблема заключается в том, что перед тем, как занести элемент в базу я проверяю его на наличие:
cursor = await db.execute('SELECT * FROM MATCHES WHERE (a="{}" AND b="{}" AND c="{}".format(a, b, c)))

И тут проблема, при выполнении SELECT получается так, что если a = None, то a != NULL и запись происходит дубликатом. Подозреваю, что это происходит из-за того, что в базу уходит запрос типа a="None", т.е. строковой тип.
Запись происходит другим запросом:
INSERT INTO MATCHES (a, b, c) VALUES (?,?,?)', (a, b, c)

Пробовал другой синтаксис:
'SELECT * FROM MATCHES WHERE (a=? AND b=? AND c=?)', (a, b, c)

Результат такой-же.
Как можно дать INSERT поднять, что None == NULL, при условии что любой элемент (a, b, c) может быть None и их гораздо больше, чем 3?
  • Вопрос задан
  • 605 просмотров
Решения вопроса 1
kshnkvn
@kshnkvn Автор вопроса
yay ✌️ t.me/kshnkvn
Решил проблему заменой оператора = на IS
SELECT * FROM MATCHES WHERE (a IS ? AND b IS ? AND c IS ?)', (a, b, c)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
А все потому, что нужно использовать prepared statement! Подозреваю, что мускул zetcode.com/db/mysqlpython
Где-то посередине..
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы