Обновление и удаление данных в PostgreSQL

Последнее обновление: 25.11.2022

Рассмотрим обновление и удаление данных на примере следующей таблицы

CREATE TABLE people (id SERIAL PRIMARY KEY, name VARCHAR(50), age INTEGER)
INSERT INTO people (name, age) VALUES ('Tom', 38)
INSERT INTO people (name, age) VALUES ('Bob', 42)
INSERT INTO people (name, age) VALUES ('Sam', 28)
INSERT INTO people (name, age) VALUES ('Alice', 33)
INSERT INTO people (name, age) VALUES ('Kate', 25)

Обновление

Для обновления в SQL выполняется команда UPDATE. Например, заменим у всех пользователей имя с Tom на Tomas:

import psycopg2

conn = psycopg2.connect(dbname="metanit", user="postgres", password="123456", host="127.0.0.1")
cursor = conn.cursor()

# обновляем строки, где name = Tom
cursor.execute("UPDATE people SET name ='Tomas' WHERE name='Tom'")
# вариант с параметрами
# cursor.execute("UPDATE people SET name =%s WHERE name=%s", ("Tomas", "Tom"))
conn.commit()

# проверяем 
cursor.execute("SELECT * FROM people")
print(cursor.fetchall())    # [(2, 'Bob', 42), (3, 'Sam', 28), (4, 'Alice', 33), (5, 'Kate', 25), (1, 'Tomas', 38)]

cursor.close()
conn.close()

Для выполнения обновления также надо выполнять метод conn.commit()

Для множественного обновления, как и для множественного добавления, применяется метод executemany():

import psycopg2

conn = psycopg2.connect(dbname="metanit", user="postgres", password="123456", host="127.0.0.1")
cursor = conn.cursor()

# данные для добавления
people = [(15, "Sam"), (18, "Alice")]
cursor.executemany("UPDATE people SET age =%s WHERE name=%s", people)
conn.commit()

# проверяем 
cursor.execute("SELECT * FROM people")
print(cursor.fetchall())    # [(2, 'Bob', 42), (5, 'Kate', 25), (1, 'Tomas', 38), (3, 'Sam', 15), (4, 'Alice', 18)]

cursor.close()
conn.close()

В данном случае на основе списка people будут формироваться две sql-команды:

UPDATE people SET age =15 WHERE name='Sam'
UPDATE people SET age =18 WHERE name='Alice'

Удаление данных

Для удаления в SQL выполняется команда DЕLETE. Например, удалим всех пользователей с именем Bob:

import psycopg2

conn = psycopg2.connect(dbname="metanit", user="postgres", password="123456", host="127.0.0.1")
cursor = conn.cursor()

# обновляем строки, где name = Tom
cursor.execute("DELETE FROM people WHERE name=%s", ("Bob",))
conn.commit()

# проверяем 
cursor.execute("SELECT * FROM people")
print(cursor.fetchall())    # [(5, 'Kate', 25), (1, 'Tomas', 38), (3, 'Sam', 15), (4, 'Alice', 18)]

cursor.close()
conn.close()

Множественное удаление:

import psycopg2

conn = psycopg2.connect(dbname="metanit", user="postgres", password="123456", host="127.0.0.1")
cursor = conn.cursor()

# удаляем строки с id =3 и id=5
people = [(3,), (5,)]
cursor.executemany("DELETE FROM people WHERE id=%s", people)
conn.commit()

# проверяем 
cursor.execute("SELECT * FROM people")
print(cursor.fetchall())    # [(1, 'Tomas', 38), (4, 'Alice', 33)]

cursor.close()
conn.close()
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850