Python PostgreSQL - Xóa dữ liệu

Bạn có thể xóa các bản ghi trong bảng hiện có bằng cách sử dụng DELETE FROMtuyên bố của cơ sở dữ liệu PostgreSQL. Để xóa các bản ghi cụ thể, bạn cần sử dụng mệnh đề WHERE cùng với nó.

Cú pháp

Sau đây là cú pháp của truy vấn DELETE trong PostgreSQL:

DELETE FROM table_name [WHERE Clause]

Thí dụ

Giả sử chúng ta đã tạo một bảng có tên CRICKETERS bằng truy vấn sau:

postgres=# CREATE TABLE CRICKETERS ( 
   First_Name VARCHAR(255), Last_Name VARCHAR(255), 
   Age int, Place_Of_Birth VARCHAR(255), Country VARCHAR(255)
);
CREATE TABLE
postgres=#

Và nếu chúng ta đã chèn 5 bản ghi vào nó bằng cách sử dụng câu lệnh INSERT như -

postgres=# insert into CRICKETERS values ('Shikhar', 'Dhawan', 33, 'Delhi', 'India');
INSERT 0 1
postgres=# insert into CRICKETERS values ('Jonathan', 'Trott', 38, 'CapeTown', 'SouthAfrica');
INSERT 0 1
postgres=# insert into CRICKETERS values ('Kumara', 'Sangakkara', 41, 'Matale', 'Srilanka');
INSERT 0 1
postgres=# insert into CRICKETERS values ('Virat', 'Kohli', 30, 'Delhi', 'India');
INSERT 0 1
postgres=# insert into CRICKETERS values ('Rohit', 'Sharma', 32, 'Nagpur', 'India');
INSERT 0 1

Tuyên bố sau đây xóa kỷ lục của vận động viên cricket có họ là 'Sangakkara'. -

postgres=# DELETE FROM CRICKETERS WHERE LAST_NAME = 'Sangakkara';
DELETE 1

Nếu bạn truy xuất nội dung của bảng bằng câu lệnh SELECT, bạn chỉ có thể thấy 4 bản ghi vì chúng tôi đã xóa một bản ghi.

postgres=# SELECT * FROM CRICKETERS;
first_name  | last_name | age | place_of_birth | country
------------+-----------+-----+----------------+-------------
Jonathan    | Trott     | 39  | CapeTown       | SouthAfrica
Virat       | Kohli     | 31  | Delhi          | India
Rohit       | Sharma    | 33  | Nagpur         | India
Shikhar     | Dhawan    | 46  | Delhi          | India
(4 rows)

Nếu bạn thực hiện câu lệnh DELETE FROM mà không có mệnh đề WHERE, tất cả các bản ghi từ bảng được chỉ định sẽ bị xóa.

postgres=# DELETE FROM CRICKETERS;
DELETE 4

Vì bạn đã xóa tất cả các bản ghi, nếu bạn cố gắng truy xuất nội dung của bảng CRICKETERS, bằng cách sử dụng câu lệnh SELECT, bạn sẽ nhận được một tập hợp kết quả trống như hình dưới đây:

postgres=# SELECT * FROM CRICKETERS;
first_name  | last_name | age | place_of_birth | country
------------+-----------+-----+----------------+---------
(0 rows)

Xóa dữ liệu bằng python

Lớp con trỏ của psycopg2 cung cấp một phương thức có tên là phương thức execute (). Phương thức này chấp nhận truy vấn như một tham số và thực thi nó.

Do đó, để chèn dữ liệu vào bảng trong PostgreSQL bằng python -

  • Nhập khẩu psycopg2 gói hàng.

  • Tạo một đối tượng kết nối bằng cách sử dụng connect() bằng cách chuyển tên người dùng, mật khẩu, máy chủ lưu trữ (mặc định tùy chọn: localhost) và, cơ sở dữ liệu (tùy chọn) làm tham số cho nó.

  • Tắt chế độ cam kết tự động bằng cách đặt giá trị false thành thuộc tính autocommit.

  • Các cursor()phương thức của lớp Kết nối của thư viện psycopg2 trả về một đối tượng con trỏ. Tạo một đối tượng con trỏ bằng phương pháp này.

  • Sau đó, thực thi câu lệnh UPDATE bằng cách chuyển nó làm tham số cho phương thức execute ().

Thí dụ

Sau mã Python sẽ xóa các bản ghi của bảng EMPLOYEE có giá trị tuổi lớn hơn 25 -

import psycopg2

#establishing the connection
conn = psycopg2.connect(
   database="mydb", user='postgres', password='password', host='127.0.0.1', port= '5432'
)

#Setting auto commit false
conn.autocommit = True

#Creating a cursor object using the cursor() method
cursor = conn.cursor()

#Retrieving contents of the table
print("Contents of the table: ")
cursor.execute('''SELECT * from EMPLOYEE''')
print(cursor.fetchall())

#Deleting records
cursor.execute('''DELETE FROM EMPLOYEE WHERE AGE > 25''')

#Retrieving data after delete
print("Contents of the table after delete operation ")
cursor.execute("SELECT * from EMPLOYEE")
print(cursor.fetchall())

#Commit your changes in the database
conn.commit()

#Closing the connection
conn.close()

Đầu ra

Contents of the table:
[('Ramya', 'Rama priya', 27, 'F', 9000.0), 
   ('Sarmista', 'Sharma', 26, 'F', 10000.0), 
   ('Tripthi', 'Mishra', 24, 'F', 6000.0), 
   ('Vinay', 'Battacharya', 21, 'M', 6000.0), 
   ('Sharukh', 'Sheik', 26, 'M', 8300.0)]
Contents of the table after delete operation:
[('Tripthi', 'Mishra', 24, 'F', 6000.0), 
   ('Vinay', 'Battacharya', 21, 'M', 6000.0)]