PHP
Python

Trang chủ

Kết nối Python, truy cơ sở dữ liệu: hướng dẫn chi tiết cho người mới

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
22/03/2025
30 phút đọc
Theo dõi Vietnix trên

Kết nối Python, truy cơ sở dữ liệu: hướng dẫn chi tiết cho người mới

Truy cập cơ sở dữ liệu trong Python là quá trình kết nối ứng dụng với hệ quản trị cơ sở dữ liệu (DBMS) để lưu trữ, truy xuất và quản lý dữ liệu một cách hiệu quả. Trong bài viết này, bạn sẽ tìm hiểu cách kết nối Python với các hệ cơ sở dữ liệu phổ biến, cách sử dụng SQLite và MySQL, thực hiện các thao tác CRUD (Create, Read, Update, Delete) cũng như xử lý giao dịch và lỗi. Nếu bạn đang tìm kiếm hướng dẫn thực tế về làm việc với database trong Python, đây chính là tài liệu bạn cần.

Điểm chính cần nắm

  • Truy cập cơ sở dữ liệu trong Python là gì: Giới thiệu về cách Python tương tác với cơ sở dữ liệu và vai trò của database trong lập trình.
  • DB-API (Database API) là gì: Định nghĩa DB-API và cách nó chuẩn hóa giao tiếp giữa Python và các hệ quản trị cơ sở dữ liệu.
  • Làm việc với SQLite trong Python: Hướng dẫn sử dụng SQLite trong Python với module sqlite3 để thao tác dữ liệu.
  • Làm việc với MySQL trong Python: Hướng dẫn kết nối và thao tác với MySQL trong Python bằng module PyMySQL.
  • Xử lý lỗi khi làm việc với database: Giới thiệu các lỗi phổ biến khi làm việc với database và cách xử lý.
  • Vietnix – Giải pháp lưu trữ tốc độ cao, bảo mật hàng đầu: Giới thiệu dịch vụ server, hosting của Vietnix với hiệu suất và bảo mật cao.
  • FAQ: Giải đáp các câu hỏi thường gặp về làm việc với database trong Python.
  • Lời kết: Tổng kết nội dung và nhấn mạnh tầm quan trọng của việc làm việc với database trong Python.

Truy cập cơ sở dữ liệu trong Python là gì?

Truy cập cơ sở dữ liệu trong Python là quá trình kết nối ứng dụng Python với hệ quản trị cơ sở dữ liệu (DBMS) để lưu trữ, truy vấn và quản lý dữ liệu một cách hiệu quả. Python hỗ trợ nhiều hệ quản trị như SQLite, MySQL, PostgreSQL, Oracle… thông qua các thư viện và API tiêu chuẩn.

Lợi ích của việc sử dụng cơ sở dữ liệu trong Python:

  • Lưu trữ dữ liệu bền vững thay vì chỉ dùng bộ nhớ RAM.
  • Dễ dàng truy vấn, cập nhật, xóa dữ liệu bằng ngôn ngữ SQL.
  • Đảm bảo tính toàn vẹn và nhất quán dữ liệu, đặc biệt khi làm việc với hệ thống lớn.
Truy cập cơ sở dữ liệu trong Python
Truy cập cơ sở dữ liệu trong Python

Các hệ quản trị cơ sở dữ liệu phổ biến hỗ trợ Python:

  • Cơ sở dữ liệu quan hệ (RDBMS):
    • SQLite (có sẵn trong Python)
    • MySQL
    • PostgreSQL
    • Microsoft SQL Server
    • Oracle
    • Sybase
    • Informix
  • Cơ sở dữ liệu NoSQL: MongoDB, Redis…

Python hỗ trợ DB-API (PEP 249), giúp thao tác với nhiều loại database theo một chuẩn chung. Nhờ đó, lập trình viên có thể dễ dàng tích hợp database vào ứng dụng Python mà không cần thay đổi quá nhiều code khi sử dụng các hệ quản trị khác nhau.

DB-API (Database API) là gì?

DB-API (Database API) là một tiêu chuẩn trong Python (được định nghĩa trong PEP 249) giúp lập trình viên làm việc với các hệ quản trị cơ sở dữ liệu (DBMS) theo một cách thống nhất.

Thay vì phải học cách sử dụng từng thư viện riêng biệt cho từng loại cơ sở dữ liệu, DB-API cung cấp một giao diện chung, giúp việc chuyển đổi giữa các hệ quản trị trở nên dễ dàng hơn.

DB-API (Database API)
DB-API (Database API)

Để giải quyết vấn đề tương thích này, Đề xuất Nâng cao Python (PEP) 249 đã giới thiệu một giao diện chuẩn hóa gọi là DB-API. Giao diện này cung cấp một khuôn khổ nhất quán cho các driver cơ sở dữ liệu, đảm bảo hành vi đồng nhất trên các hệ thống cơ sở dữ liệu khác nhau. Nó đơn giản hóa quá trình chuyển đổi giữa các cơ sở dữ liệu bằng cách thiết lập một bộ quy tắc và phương thức chung.

Các bước làm việc với DB-API trong Python

  • Kết nối đến cơ sở dữ liệu bằng cách sử dụng driver tương ứng.
  • Tạo cursor để thực thi các truy vấn SQL.
  • Thực thi truy vấn (INSERT, SELECT, UPDATE, DELETE…).
  • Lấy dữ liệu trả về nếu có.
  • Đóng kết nối sau khi hoàn tất.

Một số thư viện hỗ trợ DB-API phổ biến

  • sqlite3 (SQLite)
  • mysql-connector-python (MySQL)
  • psycopg2 (PostgreSQL)
  • pyodbc (Microsoft SQL Server)

Làm việc với SQLite trong Python

Python cung cấp mô-đun sqlite3, một driver tương thích với DB-API để làm việc với SQLite. Đây là một cơ sở dữ liệu nhẹ, không cần máy chủ, lý tưởng cho các ứng dụng nhỏ. Đối với các hệ quản trị cơ sở dữ liệu khác, cần sử dụng các gói Python phù hợp:

  • Oracle: cx_Oracle, pyodbc
  • SQL Server: pymssql, pyodbc
  • PostgreSQL: psycopg2
  • MySQL: mysql-connector-python, pymysql

Sử dụng module sqlite3 có sẵn trong Python

Python cung cấp mô-đun sqlite3 tích hợp sẵn để làm việc với SQLite, giúp bạn dễ dàng quản lý cơ sở dữ liệu mà không cần cài đặt thêm phần mềm. Dưới đây là các bước cơ bản để sử dụng SQLite trong Python:

  • Thiết lập kết nối (Connection Establishment): Dùng sqlite3.connect("tên_file.db") để kết nối đến database SQLite. Nếu file chưa tồn tại, SQLite sẽ tự động tạo mới.
  • Quản lý Transaction: Kết nối (conn) giúp kiểm soát giao dịch, bao gồm:
    • commit() – Lưu thay đổi vào database.
    • rollback() – Hoàn tác nếu có lỗi xảy ra.
    • close() – Đóng kết nối sau khi hoàn tất công việc.
  • Cursor Object: Đối tượng cursor (conn.cursor()) giúp gửi lệnh SQL và truy xuất kết quả từ database.

Trong hướng dẫn này, chúng ta sẽ học cách truy cập cơ sở dữ liệu bằng Python, lưu trữ dữ liệu trong SQLite và truy xuất dữ liệu để xử lý trong chương trình Python.

Tạo kết nối bằng sqlite3.connect()

SQLite là một hệ quản trị cơ sở dữ liệu quan hệ nhẹ, hỗ trợ giao dịch ACID và không yêu cầu server. Cơ sở dữ liệu được lưu trữ trong một file đơn lẻ, giúp dễ dàng quản lý và triển khai. Python tích hợp sẵn mô-đun sqlite3, nên bạn có thể làm việc với SQLite mà không cần cài đặt thêm phần mềm.

Mô-đun sqlite3 của Python cung cấp triển khai DB-API cho SQLite, được viết bởi Gerhard Häring. Hãy cùng tìm hiểu cách sử dụng sqlite3 để truy cập cơ sở dữ liệu trong Python.

Ví dụ:

Trước tiên, hãy kiểm tra phiên bản SQLite được tích hợp trong Python:

import sqlite3
print(sqlite3.sqlite_version)

Kết quả:

3.45.1

Bạn có thể kết nối đến SQLite bằng sqlite3.connect("database.db"), trong đó "database.db" là file chứa dữ liệu. Nếu file chưa tồn tại, SQLite sẽ tự động tạo mới.

Connection Object

Đối tượng kết nối (Connection) trong SQLite được tạo bằng hàm connect() của mô-đun sqlite3. Đối số đầu tiên của hàm là một chuỗi đại diện cho đường dẫn (tương đối hoặc tuyệt đối) đến tệp cơ sở dữ liệu SQLite. Nếu tệp chưa tồn tại, SQLite sẽ tự động tạo mới.

Ví dụ:

import sqlite3

# Tạo kết nối đến database file
conn = sqlite3.connect("testdb.sqlite3")

# Kiểm tra kiểu dữ liệu của đối tượng kết nối
print(type(conn))

Kết quả:

<class ‘sqlite3.Connection’>

Các phương thức quan trọng trong connection object:

  • cursor() – Trả về một đối tượng con trỏ (Cursor) để thực thi truy vấn SQL.
  • commit() – Lưu các thay đổi vào database sau khi thực hiện thao tác thêm, sửa, xóa.
  • rollback() – Hoàn tác các thay đổi nếu có lỗi xảy ra.
  • close() – Đóng kết nối khi không còn cần sử dụng.

Object Cursor

Sau khi tạo kết nối đến cơ sở dữ liệu, chúng ta cần lấy đối tượng con trỏ (Cursor). Con trỏ là công cụ giúp thực hiện các truy vấn SQL và thao tác với dữ liệu. Để lấy con trỏ, ta sử dụng phương thức cursor() của đối tượng kết nối:

import sqlite3

# Tạo kết nối đến database file
conn = sqlite3.connect("testdb.sqlite3")

# Lấy đối tượng con trỏ
cur = conn.cursor()

# Kiểm tra kiểu dữ liệu của con trỏ
print(type(cur))

Kết quả:

<class ‘sqlite3.Cursor’>

Chúng ta có thể thực hiện tất cả các thao tác truy vấn SQL, với sự trợ giúp của phương thức execute() có sẵn trong đối tượng con trỏ. Phương thức này cần một đối số chuỗi là một lệnh SQL hợp lệ.

Ví dụ:

cur.execute("""
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER
    )
""")

# Lưu thay đổi
conn.commit()

Sau khi thực thi truy vấn, đừng quên gọi commit() để lưu các thay đổi vào database.

Cách tạo bảng trong database

Mình sẽ thêm bảng Employee vào cơ sở dữ liệu testdb.sqlite3 vừa được tạo. Trong script dưới đây, chúng ta gọi phương thức execute() của object cursor để thực thi câu lệnh CREATE TABLE.

Ví dụ:

import sqlite3

# Kết nối hoặc tạo database nếu chưa tồn tại
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh SQL tạo bảng Employee
qry = """
CREATE TABLE IF NOT EXISTS Employee (
    EmpID INTEGER PRIMARY KEY AUTOINCREMENT,
    FIRST_NAME TEXT(20),
    LAST_NAME TEXT(20),
    AGE INTEGER,
    SEX TEXT(1),
    INCOME FLOAT
);
"""

try:
    cur.execute(qry)
    conn.commit()  # Lưu thay đổi
    print("Table created successfully")
except sqlite3.Error as e:
    print(f"Error creating table: {e}")

# Đóng kết nối sau khi hoàn thành
conn.close()

Giải thích:

  • sqlite3.connect("testdb.sqlite3") – Kết nối đến database hoặc tạo mới nếu chưa tồn tại.

  • cur.execute(qry) – Thực thi lệnh SQL tạo bảng.

  • conn.commit() – Lưu thay đổi vào database.

  • Bọc trong try-except để xử lý lỗi nếu có.

  • Đóng kết nối bằng conn.close() sau khi hoàn thành.

Kiểm tra bảng đã tạo

Khi chương trình trên được chạy, cơ sở dữ liệu với bảng Employee sẽ được tạo trong thư mục làm việc hiện tại. Chúng ta có thể xác minh bằng cách liệt kê các bảng trong cơ sở dữ liệu này trong console SQLite. Nếu thấy bảng Employee xuất hiện, nghĩa là đã tạo thành công.

sqlite3 testdb.sqlite3
sqlite> .tables
Employee

Các thao tác với dữ liệu

Khi làm việc với SQLite trong Python, việc thao tác với dữ liệu là một phần quan trọng. Các thao tác cơ bản bao gồm chèn (INSERT), đọc (READ), cập nhật (UPDATE) và xóa (DELETE) dữ liệu từ bảng trong database. Python cung cấp các phương thức thông qua module sqlite3 để thực hiện những thao tác này một cách dễ dàng.

Thao tác insert trong sqlite

Thao tác INSERT được yêu cầu khi bạn muốn tạo bản ghi vào một bảng trong cơ sở dữ liệu.

Ví dụ 1: insert dữ liệu trực tiếp

Ví dụ sau thực hiện câu lệnh SQL INSERT để tạo một bản ghi trong bảng EMPLOYEE:

import sqlite3

# Kết nối đến cơ sở dữ liệu
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh INSERT
qry = """
INSERT INTO Employee (FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)
VALUES ("Mac", "Mohan", 20, "M", 2000)
"""

try:
    cur.execute(qry)
    conn.commit()
    print("Thêm bản ghi thành công.")
except Exception as e:
    conn.rollback()
    print("Lỗi khi chèn dữ liệu:", e)

# Đóng kết nối
conn.close()

Ví dụ 2: Sử dụng tham số

Dùng tham số giúp mã an toàn hơn và tránh lỗi SQL Injection.

import sqlite3

# Kết nối đến cơ sở dữ liệu
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh INSERT sử dụng tham số
qry = """
INSERT INTO Employee (FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)
VALUES (?, ?, ?, ?, ?)
"""

try:
    data = ("Makrand", "Mohan", 21, "M", 5000)
    cur.execute(qry, data)
    conn.commit()
    print("Thêm bản ghi thành công.")
except Exception as e:
    conn.rollback()
    print("Lỗi khi chèn dữ liệu:", e)

# Đóng kết nối
conn.close

Giải thích:

  • Kết nối đến cơ sở dữ liệu SQLite.

  • Tạo con trỏ để thực hiện truy vấn.

  • Thực thi lệnh INSERT:

    • Ví dụ 1: Dữ liệu được truyền trực tiếp.

    • Ví dụ 2: Dùng dấu ? để truyền tham số giúp mã an toàn hơn.

  • Lưu thay đổi với conn.commit().

  • Xử lý lỗi bằng try-except. Nếu có lỗi, rollback() sẽ hoàn tác thay đổi.

  • Đóng kết nối với conn.close().

Thao tác READ trong SQLite bằng Python

Thao tác READ trên bất kỳ cơ sở dữ liệu nào có nghĩa là lấy thông tin hữu ích từ cơ sở dữ liệu. Khi kết nối cơ sở dữ liệu đã được thiết lập, bạn sẵn sàng thực hiện một truy vấn vào cơ sở dữ liệu này. Bạn có thể sử dụng phương thức fetchone() để lấy một bản ghi hoặc fetchall() để lấy nhiều giá trị từ một bảng cơ sở dữ liệu.

  • Fetchone() – Lấy hàng tiếp theo của tập kết quả truy vấn. Một tập kết quả là một đối tượng được trả về khi đối tượng con trỏ được sử dụng để truy vấn một bảng.
  • Fetchall() – Lấy tất cả các hàng trong một tập kết quả. Nếu một số hàng đã được trích xuất từ tập kết quả, thì nó sẽ truy xuất các hàng còn lại từ tập kết quả.
  • Rowcount – Thuộc tính chỉ đọc, trả về số hàng bị ảnh hưởng bởi phương thức execute().

Ví dụ: Đọc dữ liệu từ bảng Employee

Trong mã dưới đây, đối tượng con trỏ thực hiện truy vấn SELECT * FROM EMPLOYEE. Tập kết quả được lấy bằng phương thức fetchall(). Chúng ta in ra tất cả các bản ghi trong tập kết quả bằng một vòng lặp for.

import sqlite3

conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()
qry = "SELECT * FROM EMPLOYEE"

try:
   # Execute the SQL command
   cur.execute(qry)
   # Fetch all the rows in a list of lists.
   results = cur.fetchall()
   for row in results:
      fname = row[1]
      lname = row[2]
      age = row[3]
      sex = row[4]
      income = row[5]
      # Now print fetched result
      print("Fname={}, Lname={}, Age={}, Sex={}, Income={}".format(fname, lname, age, sex, income))
except Exception as e:
   print(e)
   print("Error: Unable to fetch data")

conn.close()

Giải thích:

  1. Kết nối với SQLite.

  2. Tạo con trỏ để thực hiện truy vấn.

  3. Thực thi lệnh SELECT.

  4. Dùng fetchall() để lấy tất cả kết quả.

  5. Duyệt từng bản ghi và in ra màn hình.

  6. Đóng kết nối sau khi hoàn tất.

Kết quả:

Fname=Mac, Lname=Mohan, Age=20, Sex=M, Income=2000.0
Fname=Makrand, Lname=Mohan, Age=21, Sex=M, Income=5000.0

Lệnh fetchall() giúp lấy toàn bộ dữ liệu trong bảng EMPLOYEE và hiển thị chúng một cách có cấu trúc. Nếu chỉ muốn lấy một bản ghi tại một thời điểm, bạn có thể sử dụng fetchone().

Update Operation

Thao tác UPDATE được sử dụng để cập nhật một hoặc nhiều bản ghi đã có trong cơ sở dữ liệu. Trong ví dụ sau, chúng ta sẽ cập nhật tất cả các bản ghi có INCOME = 2000, tăng thu nhập thêm 1000.

import sqlite3

# Kết nối đến cơ sở dữ liệu
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh cập nhật dữ liệu
qry = "UPDATE EMPLOYEE SET INCOME = INCOME + 1000 WHERE INCOME = ?"

try:
    cur.execute(qry, (2000,))  # Thực thi truy vấn với tham số
    conn.commit()  # Lưu thay đổi vào cơ sở dữ liệu
    print("Records Updated Successfully")
except Exception as e:
    print("Error:", e)

conn.close()

Giải thích:

  • Hàm connect() tạo kết nối đến cơ sở dữ liệu SQLite.

  • Phương thức cursor() lấy đối tượng con trỏ để thao tác với cơ sở dữ liệu.

  • Truy vấn UPDATE tăng thu nhập của các nhân viên có INCOME = 2000 thêm 1000.

  • commit() giúp lưu các thay đổi vào cơ sở dữ liệu.

  • Nếu có lỗi xảy ra, thông báo lỗi sẽ được in ra.

Delete Operation

Thao tác DELETE được sử dụng khi bạn muốn xóa một hoặc nhiều bản ghi khỏi cơ sở dữ liệu. Ví dụ sau sẽ xóa tất cả các nhân viên có INCOME < 2000:

import sqlite3

# Kết nối đến cơ sở dữ liệu
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh xóa dữ liệu
qry = "DELETE FROM EMPLOYEE WHERE INCOME < ?"

try:
    cur.execute(qry, (2000,))  # Thực thi truy vấn với tham số
    conn.commit()  # Lưu thay đổi vào cơ sở dữ liệu
    print("Records Deleted Successfully")
except Exception as e:
    print("Error:", e)

conn.close()

Giải thích:

  • Truy vấn DELETE xóa tất cả nhân viên có INCOME < 2000.

  • Sau khi thực thi truy vấn, commit() giúp lưu thay đổi.

  • Nếu có lỗi xảy ra, thông báo lỗi sẽ được hiển thị.

Performing Transactions

Giao dịch (Transaction) là một cơ chế quan trọng trong cơ sở dữ liệu, giúp đảm bảo tính toàn vẹn của dữ liệu. Một giao dịch trong cơ sở dữ liệu phải tuân theo bốn thuộc tính ACID sau:

  • Atomicity – Giao dịch phải hoàn thành toàn bộ hoặc không có gì xảy ra.
  • Consistency – Cơ sở dữ liệu luôn duy trì trạng thái hợp lệ trước và sau giao dịch.
  • Isolation – Các giao dịch không bị ảnh hưởng bởi các giao dịch khác đang thực thi đồng thời.
  • Durability – Một khi giao dịch được xác nhận, dữ liệu sẽ được lưu vĩnh viễn, ngay cả khi hệ thống gặp sự cố.

Python DB API 2.0 cung cấp hai phương thức quan trọng để kiểm soát giao dịch:

  • commit() – Xác nhận và lưu các thay đổi vào cơ sở dữ liệu.
  • rollback() – Hủy bỏ giao dịch nếu có lỗi xảy ra.
Performing Transactions
Performing Transactions

Ví dụ:

Dưới đây là một chương trình thực hiện transaction, xóa tất cả nhân viên có AGE > 20. Nếu có lỗi, giao dịch sẽ bị hủy:

import sqlite3

# Kết nối đến cơ sở dữ liệu
conn = sqlite3.connect("testdb.sqlite3")
cur = conn.cursor()

# Câu lệnh xóa dữ liệu
qry = "DELETE FROM EMPLOYEE WHERE AGE > ?"

try:
    cur.execute(qry, (20,))  # Thực thi truy vấn với tham số
    conn.commit()  # Xác nhận thay đổi
    print("Transaction Committed Successfully")
except Exception as e:
    conn.rollback()  # Hủy bỏ nếu có lỗi
    print("Transaction Rolled Back Due To Error:", e)

conn.close()

Giải thích:

  • Truy vấn DELETE xóa tất cả nhân viên có AGE > 20.

  • Nếu truy vấn thực thi thành công, commit() sẽ xác nhận giao dịch.

  • Nếu có lỗi xảy ra, rollback() sẽ hủy giao dịch để tránh mất dữ liệu.

Commit Operation

Commit là thao tác báo hiệu cho cơ sở dữ liệu chấp nhận các thay đổi. Sau khi thực hiện commit(), mọi thay đổi sẽ được lưu vĩnh viễn và không thể hoàn nguyên. Dưới đây là cách gọi phương thức commit() trong Python:

db.commit()

Rollback Operation

Nếu bạn không hài lòng với một hoặc nhiều thay đổi và muốn hoàn nguyên chúng, hãy sử dụng phương thức rollback(). Dưới đây là cách gọi phương thức rollback():

db.rollback()

Làm việc với MySQL trong Python

MySQL là một trong những hệ quản trị cơ sở dữ liệu phổ biến nhất hiện nay, và Python cung cấp nhiều cách để tương tác với MySQL. Một trong những phương pháp phổ biến là sử dụng PyMySQL, một module thuần Python giúp kết nối và làm việc với MySQL một cách linh hoạt. Trong phần này, mình sẽ hướng dẫn cách cài đặt và sử dụng PyMySQL để kết nối với MySQL database, giúp bạn dễ dàng thao tác dữ liệu bằng Python.

PyMySQL Module

PyMySQL là một thư viện Python giúp kết nối với máy chủ MySQL. Nó hỗ trợ Python Database API v2.0 và là một giải pháp thay thế thuần Python cho MySQLdb. Với PyMySQL, bạn có thể thực hiện các thao tác như:

  • Quản lý giao dịch và xử lý lỗi.
  • Kết nối đến MySQL.
  • Thực thi các truy vấn SQL (INSERT, SELECT, UPDATE, DELETE).

Cài đặt PyMySQL

PyMySQL là một module giúp Python kết nối với MySQL. Trước khi sử dụng, bạn cần kiểm tra xem module này đã được cài đặt hay chưa.

Kiểm tra module PyMySQL

Bạn có thể mở Python và nhập lệnh sau để kiểm tra:

import PyMySQL

Nếu lệnh chạy mà không báo lỗi, PyMySQL đã được cài đặt sẵn. Ngược lại, nếu nhận được thông báo lỗi như bên dưới. Điều đó có nghĩa là module chưa được cài đặt hoặc môi trường Python không nhận diện được nó.

Traceback (most recent call last):
File “test.py”, line 3, in
import pymysql
ImportError: No module named “pymysql”

Phiên bản ổn định cuối cùng có sẵn trên PyPI. Bạn có thể cài đặt phiên bản mới nhất bằng lệnh sau:

pip install pymysql

iconLưu ý

Nếu bạn sử dụng Linux hoặc macOS, có thể cần thêm sudo trước lệnh cài đặt để có quyền truy cập đầy đủ.

Kết nối MySQL Database

Trước khi kết nối với cơ sở dữ liệu MySQL, hãy đảm bảo các điểm sau:

  • Đã tạo cơ sở dữ liệu TESTDB.
  • Đã tạo bảng EMPLOYEE trong TESTDB với các trường: FIRST_NAME, LAST_NAME, AGE, SEX, và INCOME.
  • Đã thiết lập tài khoản truy cập với ID người dùng"testuser"mật khẩu"test123".
  • Đã cài đặt module PyMySQL trên máy.
  • Đã tìm hiểu qua hướng dẫn MySQL để nắm được những kiến thức cơ bản.

Ví dụ:

Để sử dụng cơ sở dữ liệu MySQL thay vì cơ sở dữ liệu SQLite như trong các ví dụ trước, chúng ta cần thay đổi hàm connect() như sau:

import pymysql  

# mở kết nối đến MySQL  
db = pymysql.connect(host="localhost",  
                     user="testuser",  
                     password="test123",  
                     database="TESTDB")  

Ngoài sự thay đổi này, mọi thao tác cơ sở dữ liệu đều có thể được thực hiện mà không gặp khó khăn.

Xử lý lỗi khi làm việc với database

Khi làm việc với MySQL trong Python, có nhiều nguyên nhân có thể dẫn đến lỗi, chẳng hạn như:

  • Lỗi cú pháp trong câu lệnh SQL.
  • Lỗi kết nối đến cơ sở dữ liệu.
  • Gọi phương thức fetch trên một câu lệnh đã bị hủy hoặc đã hoàn thành.

Các ngoại lệ trong DB API

DB API định nghĩa một số ngoại lệ mà các module cơ sở dữ liệu (bao gồm PyMySQL) phải tuân theo. Dưới đây là danh sách các ngoại lệ phổ biến:

STTNgoại lệMô tả
1WarningCảnh báo về vấn đề không nghiêm trọng.
2ErrorLớp cơ bản cho tất cả các lỗi liên quan đến cơ sở dữ liệu.
3InterfaceErrorLỗi liên quan đến module cơ sở dữ liệu, không phải chính cơ sở dữ liệu.
4DatabaseErrorLỗi chung xảy ra trong cơ sở dữ liệu.
5DataErrorLỗi dữ liệu, chẳng hạn nhập dữ liệu sai kiểu.
6OperationalErrorLỗi liên quan đến hoạt động như mất kết nối, timeout.
7IntegrityErrorLỗi vi phạm ràng buộc như khóa chính, khóa ngoại.
8InternalErrorLỗi bên trong module cơ sở dữ liệu, chẳng hạn con trỏ không hợp lệ.
9ProgrammingErrorLỗi do truy vấn sai cú pháp, bảng không tồn tại.
10NotSupportedErrorLỗi do gọi một chức năng không được hỗ trợ.
Các ngoại lệ trong DB API

Ví dụ: Xử lý lỗi kết nối

import pymysql  

try:  
    # mở kết nối đến MySQL  
    db = pymysql.connect(host="localhost",  
                         user="testuser",  
                         password="test123",  
                         database="TESTDB")  
    print("Kết nối thành công!")  

except pymysql.OperationalError as e:  
    print(f"Lỗi kết nối: {e}")  

finally:  
    if 'db' in locals() and db.open:  
        db.close()  
        print("Đã đóng kết nối.")  

Ví dụ: Xử lý lỗi khi thực thi truy vấn

try:  
    with db.cursor() as cursor:  
        sql = "SELECT * FROM EMPLOYEE"  
        cursor.execute(sql)  
        results = cursor.fetchall()  
        for row in results:  
            print(row)  

except pymysql.ProgrammingError as e:  
    print(f"Lỗi truy vấn SQL: {e}")  

except pymysql.DatabaseError as e:  
    print(f"Lỗi cơ sở dữ liệu: {e}")  

Ví dụ: Xử lý nhiều loại lỗi

try:  
    with db.cursor() as cursor:  
        sql = "INSERT INTO EMPLOYEE (FIRST_NAME, LAST_NAME, AGE) VALUES ('John', 'Doe', 'Ba mươi')"  
        cursor.execute(sql)  
        db.commit()  

except pymysql.DataError as e:  
    print(f"Lỗi dữ liệu: {e}")  

except pymysql.IntegrityError as e:  
    print(f"Lỗi ràng buộc dữ liệu: {e}")  

except pymysql.DatabaseError as e:  
    print(f"Lỗi chung về cơ sở dữ liệu: {e}")  

finally:  
    db.close()  

Vietnix – Giải pháp lưu trữ tốc độ cao, bảo mật hàng đầu

Vietnix là nhà cung cấp dịch vụ thuê máy chủ, hosting, VPS, domain uy tín tại Việt Nam. Với cam kết mang đến giải pháp lưu trữ hiệu quả, bảo mật cao, Vietnix cung cấp dịch vụ chất lượng cùng đội ngũ hỗ trợ kỹ thuật 24/7. Hơn 80.000 khách hàng đã tin tưởng lựa chọn Vietnix nhờ dịch vụ đáng tin cậy, giúp tối ưu hiệu suất và bảo vệ dữ liệu doanh nghiệp.

Thông tin liên hệ:

  • Website: https://vietnix.vn/
  • Hotline: 18001093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, TP. Hồ Chí Minh.

Câu hỏi thường gặp

Làm thế nào để kết nối Python với cơ sở dữ liệu SQLite?

Python hỗ trợ SQLite thông qua module sqlite3, có sẵn trong thư viện chuẩn. Để kết nối với SQLite, bạn có thể sử dụng lệnh:

import sqlite3 conn = sqlite3.connect("database.db") # Tạo kết nối đến database cursor = conn.cursor() # Tạo đối tượng cursor để thao tác với database

Sau khi kết nối, bạn có thể thực hiện các truy vấn SQL như SELECT, INSERT, UPDATE, DELETE bằng phương thức execute() hoặc executemany().

DB-API trong Python là gì, và tại sao nó quan trọng?

DB-API (Database API) là tiêu chuẩn do Python đề xuất để làm việc với cơ sở dữ liệu. Nó giúp thống nhất cách kết nối, truy vấn, xử lý lỗi giữa các thư viện database khác nhau.
Ví dụ, dù bạn làm việc với SQLite (sqlite3), MySQL (PyMySQL), hay PostgreSQL (psycopg2), cách sử dụng API đều tương tự nhau, giúp việc di chuyển giữa các hệ quản trị cơ sở dữ liệu (DBMS) trở nên dễ dàng.

Cách bảo mật thông tin đăng nhập cơ sở dữ liệu khi sử dụng Python?

Không nên lưu thông tin đăng nhập (username, password) trực tiếp trong code vì có thể bị lộ khi chia sẻ file hoặc đăng lên repository. Thay vào đó, có thể sử dụng:
Biến môi trường:
import os db_user = os.getenv("DB_USER") db_password = os.getenv("DB_PASSWORD")

File cấu hình .env: Dùng thư viện python-dotenv để quản lý biến môi trường.

Có thể sử dụng đa luồng (threading/multiprocessing) khi truy cập cơ sở dữ liệu trong Python không?

Có thể, nhưng cần cẩn thận khi chia sẻ kết nối database giữa nhiều luồng.
– SQLite không hỗ trợ truy cập đồng thời tốt.
– Với MySQL/PostgreSQL, có thể sử dụng connection pooling để quản lý kết nối hiệu quả hơn.

Lời kết

Làm việc với cơ sở dữ liệu trong Python không chỉ giúp bạn lưu trữ và quản lý dữ liệu một cách hiệu quả mà còn là kỹ năng quan trọng khi xây dựng ứng dụng thực tế. Với sự hỗ trợ từ DB-API và các thư viện mạnh mẽ như sqlite3 hay PyMySQL, bạn có thể dễ dàng thao tác với dữ liệu trong nhiều hệ thống khác nhau. Nếu bạn có bất cứ thắc mắc hay cần hỗ trợ gì, hãy để lại bình luận bên dưới mình hỗ trợ nhanh nhất. Cảm ơn bạn đã đọc!

Mọi người cũng xem:

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn