Прямой ответ на ваш вопрос: вы делаете tuple + tuple
, чтобы удвоить кортеж.
cursor.execute(upsert_query, data_tuple + data_tuple)
Другие параметры:
Если у вас есть отдельные значения и вы создаете кортеж, вы можете напрямую создать кортеж с двойным числом значений.
query="""INSERT INTO table (col1,col2,col3,col4,col5,col6,col7,col8,col9,..col20) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
ON CONFLICT(col2) DO UPDATE SET col1=%s, col3=%s, col4=%s, ..."""
cur.execute(query, (c1, c2, c3, ... c20, c1, c3, c4, ... c20))
Вам нужно будет указать значения дважды (кроме столбца col2).
Если у вас уже есть кортеж, о чем вы изначально просили, то вы будете использовать +
для объединения одного кортежа дважды.
Если у вас есть отдельные значения, а некортеж, вы также можете использовать именованные параметры, такие как словарь.
query="""INSERT INTO table (col1,col2,col3,col4...) VALUES(%(c1)s, %(c2)s, %(c3)s, %(c4)s...) ON CONFLICT(col2) DO UPDATE SET col1=%(c1)s, col3=%(c3)s, col4=%(c4)s, ..."""
cur.execute(query, {'c1': c1val, 'c2': c2val, 'c3': c3val, 'c4': c4val, ...})
Эта форма хороша для удобства чтения, передает параметры только один раз и проста в обслуживании (увеличение столбцов и т. Д.), Если количество столбцов изменится в будущем.