@khaziev_m

Как в psycopg2 реализовывается INSERT или UPDATE в зависимости от того есть ли запись с таким primary key в базе данных?

def update():
    categories = [('73638', 'Ключи'), ('73639', 'Мне повезёт!'), ('73780', 'Аккаунты')]

    connection = psycopg2.connect(host='127.0.0.1', user='santa', password='bar1703', dbname='test')

    cursor = connection.cursor()

    cursor.executemany('INSERT INTO goods_category(id, title) VALUES (%s, %s)', categories)

    connection.commit()

    connection.close()
  • Вопрос задан
  • 1650 просмотров
Пригласить эксперта
Ответы на вопрос 2
@gill-sama
Версия постгри какая? С 9.5 добавлена команда on conflict. А так вам придётся вначале заапдейтить все совпадения, а после дописать новые. Если хотите можете обернуть все в процедуру и вызывать её для записи.
Ответ написан
@khaziev_m Автор вопроса
def update():
    categories = [{'name': 'Ключи', 'id': '73638'}, {'name': 'Мне повезёт!', 'id': '73639'}, {'name': 'Аккаунты', 'id': '73780'}]

    connection = psycopg2.connect(host='127.0.0.1', user='santa', password='bar1703', dbname='test')

    cursor = connection.cursor()

    cursor.executemany('INSERT INTO goods_category(id, title) VALUES (%(id)s, %(name)s) '
                       'ON CONFLICT (id) DO UPDATE SET title=%(name)s', categories)
    connection.commit()

    connection.close()

P.S. В моём debian jessie официальный репозиторий предлагают постгри версии 9.4. Вот статья про установку 9.5 ссылка. Может кому пригодится :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы