Как вставить значения «нулевые» в базу данных PostgreSQL с помощью Python?

StackOverflow https://stackoverflow.com/questions/4231491

Вопрос

Есть ли хорошая практика для ввода 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 Водитель?

Это было полезно?

Решение

Чтобы вставить нулевые значения в базу данных, у вас есть два варианта:

  1. опустить это поле из вашего оператора вставки или
  2. использовать 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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top