Как вставить значения NULL в базу данных PostgreSQL с помощью Python? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть список кортежей с данными примерно так:

list1 = [(1100, 'abc', '{"1209": "Y", "1210": "Y"}'), (1100, 'abc', None)]

def insert_sample_data(col_val):
    cur = self.con.cursor()
    sql = """insert into sampletable values {}""".format(col_val)
    cur.execute(sql)
    self.con.commit()
    cur.close()

values1 = ', '.join(map(str, list1))  #bulk insert
insert_sample_data(values1)

Структура таблицы: ssid int, имя varchar, правила jsonb

Когда я пытаюсь вставить данные, но этовыдает мне сообщение о том, что "вставить столбец" нет "не существует".Как мы можем загрузить данные в таблицу с помощью 'Null' или 'None'?

Я смотрел на это решение, но в этом случае это не помогло Как вставить значения NULL в базу данных PostgreSQL, используяPython?

1 Ответ

0 голосов
/ 18 сентября 2018

Как утверждает @shmee, вам нужно использовать что-то вроде executemany и параметризировать свои значения вместо использования format, что уязвимо для внедрения SQL.

Я бы изменил ваш код следующим образом:

def insert_sample_data(self, values): # added self since you are referencing it below
    with self.con.cursor() as cur:
        sql = "insert into sampletable values (%s, %s, %s)" # Use %s for parameters
        cur.executemany(sql, values) # Pass the list of tuples directly
        self.con.commit()

list1 = [(1100, 'abc', '{"1209": "Y", "1210": "Y"}'), (1100, 'abc', None)]
self.insert_sample_data(list1) # pass the list directly
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...