如果表为空,则执行INSERT多个值

时间:2018-10-20 22:31:19

标签: python python-3.x postgresql psycopg2

我正在尝试在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。我也看过thisthisthis,但没有骰子。

1 个答案:

答案 0 :(得分:2)

使用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)