Как вставить значения «нулевые» в базу данных PostgreSQL с помощью Python?
-
26-09-2019 - |
Вопрос
Есть ли хорошая практика для ввода NULL
Ключевые значения в базе данных PostgreSQL, когда переменная None
в питоне?
Запуск этого запроса:
mycursor.execute('INSERT INTO products (user_id, city_id, product_id, quantity, price) VALUES (%i, %i, %i, %i, %f)' %(user_id, city_id, product_id, quantity, price))
Результаты в АА TypeError
Исключение, когда user_id
является None
.
Как может А. NULL
быть вставленным в базу данных, когда значение None
, используя psycopg2
Водитель?
Решение
Чтобы вставить нулевые значения в базу данных, у вас есть два варианта:
- опустить это поле из вашего оператора вставки или
- использовать
None
Также: для защиты от SQL-инъекций вы не должны использовать нормальную интерполяцию строки для ваших запросов.
Вы должны пройти два (2) аргумента execute()
, например:
mycursor.execute("""INSERT INTO products
(city_id, product_id, quantity, price)
VALUES (%s, %s, %s, %s)""",
(city_id, product_id, quantity, price))
Альтернатива № 2:
user_id = None
mycursor.execute("""INSERT INTO products
(user_id, city_id, product_id, quantity, price)
VALUES (%s, %s, %s, %s, %s)""",
(user_id, city_id, product_id, quantity, price))
Другие советы
С текущей PSYCOPG вместо этого не используйте переменную, установленную на «NULL».
variable = 'NULL'
insert_query = """insert into my_table values(date'{}',{},{})"""
format_query = insert_query.format('9999-12-31', variable, variable)
curr.execute(format_query)
conn.commit()
>> insert into my_table values(date'9999-12-31',NULL,NULL)
Упрощенный подход, который также практичен с большим количеством столбцов:
Позволять row
быть список значений, которые будут вставлены, которые могут содержать None
. Отказ Чтобы вставить его в PostgreSQL, мы делаем следующим образом
values = ','.join(["'" + str(i) + "'" if i else 'NULL' for i in row])
cursor.execute('insert into myTable VALUES ({});'.format(values))
conn.commit()