Выполните INSERT несколько значений, если таблица пуста. POSTGRES - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь добавить некоторые значения по умолчанию в таблицу postgres.Я могу добавить одно значение, но я хочу добавить 5 значений по умолчанию.Я попробовал это ниже, но он создает только одно значение, так как после вставки первого значения пустое условие больше не действует.

records_to_insert = [( 1,'foo', 30, 2, True),
                   ( 2,'bar', 60, 3, False),
                   ( 3,'hero', 95, 2, False),
                   ( 4,'borth', 45, 1, True),
                   ( 5,'here', 30, 2, True)]
sql_insert_query = """ INSERT INTO tester (id, name, time, rating,others)
                SELECT %s,%s,%s,%s,%s
                WHERE NOT EXISTS (SELECT * FROM tester) """
cursor = connection.cursor()
#executemany() to insert 3 rows
result  = cursor.executemany(sql_insert_query, records_to_insert)

Я использую python3 и postgres10.5.Я также посмотрел на это , это и это , но без игры в кости.

1 Ответ

0 голосов
/ 21 октября 2018

Использовать psycopg2.extras.execute_values(cur, sql, argslist, template=None, page_size=100)

Выполнить оператор, используя VALUES с последовательностью параметров.Параметры:

  • cur - курсор, используемый для выполнения запроса.
  • sql - запрос для выполнения.Он должен содержать один заполнитель% s, который будет заменен списком VALUES.(...)

Необходимо переформулировать запрос, чтобы использовать VALUES:

from psycopg2.extras import execute_values

sql_insert_query = """ 
    INSERT INTO tester (id, name, time, rating, others)
    SELECT * FROM (VALUES %s) s
    WHERE NOT EXISTS (SELECT 1 FROM tester) """
execute_values(cursor, sql_insert_query, records_to_insert)
...