Python - Cơ sở dữ liệu và SQL

Ngôn ngữ lập trình Python có các tính năng mạnh mẽ để lập trình cơ sở dữ liệu. Python hỗ trợ nhiều cơ sở dữ liệu khác nhau như SQLite, MySQL, Oracle, Sybase, PostgreSQL, v.v. Python cũng hỗ trợ Ngôn ngữ Định nghĩa Dữ liệu (DDL), Ngôn ngữ Thao tác Dữ liệu (DML) và Câu lệnh Truy vấn Dữ liệu. Tiêu chuẩn Python cho giao diện cơ sở dữ liệu là Python DB-API. Hầu hết các giao diện cơ sở dữ liệu Python đều tuân theo tiêu chuẩn này.

Đây là danh sách các giao diện cơ sở dữ liệu Python có sẵn: Giao diện cơ sở dữ liệu Python và API . Bạn phải tải xuống mô-đun API DB riêng biệt cho mỗi cơ sở dữ liệu bạn cần truy cập.

Trong chương này, chúng ta sẽ thấy việc sử dụng cơ sở dữ liệu SQLite trong ngôn ngữ lập trình python. Nó được thực hiện bằng cách sử dụng mô-đun sqlite3 có sẵn của python. Đầu tiên bạn nên tạo một đối tượng kết nối đại diện cho cơ sở dữ liệu và sau đó tạo một số đối tượng con trỏ để thực thi các câu lệnh SQL.

Kết nối với cơ sở dữ liệu

Sau mã Python cho thấy cách kết nối với cơ sở dữ liệu hiện có. Nếu cơ sở dữ liệu không tồn tại, thì nó sẽ được tạo và cuối cùng một đối tượng cơ sở dữ liệu sẽ được trả về.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";

Tại đây, bạn cũng có thể cung cấp tên cơ sở dữ liệu làm tên đặc biệt :memory:để tạo cơ sở dữ liệu trong RAM. Bây giờ, hãy chạy chương trình trên để tạo cơ sở dữ liệu của chúng tôitest.dbtrong thư mục hiện tại. Bạn có thể thay đổi đường dẫn của mình theo yêu cầu của bạn. Giữ đoạn mã trên trong tệp sqlite.py và thực thi nó như hình bên dưới. Nếu cơ sở dữ liệu được tạo thành công, thì nó sẽ hiển thị thông báo sau.

$chmod +x sqlite.py $./sqlite.py
Open database successfully

Tạo bảng

Chương trình Python sau sẽ được sử dụng để tạo một bảng trong cơ sở dữ liệu đã tạo trước đó.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute('''CREATE TABLE COMPANY
         (ID INT PRIMARY KEY     NOT NULL,
         NAME           TEXT    NOT NULL,
         AGE            INT     NOT NULL,
         ADDRESS        CHAR(50),
         SALARY         REAL);''')
print "Table created successfully";
conn.close()

Khi chương trình trên được thực thi, nó sẽ tạo ra bảng COMPANY trong test.db và nó sẽ hiển thị các thông báo sau:

Opened database successfully
Table created successfully

Chèn hoạt động

Chương trình Python sau đây trình bày cách tạo bản ghi trong bảng COMPANY được tạo trong ví dụ trên.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");
conn.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");
conn.commit()
print "Records created successfully";
conn.close()

Khi chương trình trên được thực thi, nó sẽ tạo các bản ghi đã cho trong bảng COMPANY và nó sẽ hiển thị hai dòng sau:

Opened database successfully
Records created successfully

Chọn hoạt động

Chương trình Python sau đây cho thấy cách tìm nạp và hiển thị các bản ghi từ bảng COMPANY được tạo trong ví dụ trên.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Khi chương trình trên được thực thi, nó sẽ cho ra kết quả như sau.

Opened database successfully
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

Cập nhật hoạt động

Mã Python sau đây cho thấy cách sử dụng câu lệnh UPDATE để cập nhật bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi đã cập nhật từ bảng COMPANY.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit
print "Total number of rows updated :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Khi chương trình trên được thực thi, nó sẽ cho ra kết quả như sau.

Opened database successfully
Total number of rows updated : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 25000.0
ID = 2
NAME = Allen
ADDRESS = Texas
SALARY = 15000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully

Xóa hoạt động

Mã Python sau đây cho thấy cách sử dụng câu lệnh DELETE để xóa bất kỳ bản ghi nào, sau đó tìm nạp và hiển thị các bản ghi còn lại từ bảng COMPANY.

#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('test.db')
print "Opened database successfully";
conn.execute("DELETE from COMPANY where ID = 2;")
conn.commit()
print "Total number of rows deleted :", conn.total_changes
cursor = conn.execute("SELECT id, name, address, salary from COMPANY")
for row in cursor:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()

Khi chương trình trên được thực thi, nó sẽ cho ra kết quả như sau.

Opened database successfully
Total number of rows deleted : 1
ID = 1
NAME = Paul
ADDRESS = California
SALARY = 20000.0
ID = 3
NAME = Teddy
ADDRESS = Norway
SALARY = 20000.0
ID = 4
NAME = Mark
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully