Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Kết nối cơ sở dữ liệu MySQL Python
Trong bài viết này, mình sẽ học cách kết nối và làm việc với cơ sở dữ liệu MySQL bằng Python sử dụng mô-đun "MySQL Connector Python". Mình sẽ tìm hiểu cách phát triển và tích hợp ứng dụng Python với máy chủ cơ sở dữ liệu MySQL.
Trong Python, có nhiều mô-đun khác nhau để giao tiếp với cơ sở dữ liệu MySQL, như PyMySQL, MySQLDB, MySqlClient, OurSQL, vv. Tất cả các mô-đun này tuân thủ Đặc tả API cơ sở dữ liệu Python v2.0 (PEP 249), có nghĩa là cú pháp, phương thức và cách truy cập cơ sở dữ liệu giống nhau trong tất cả các mô-đun.
PEP 249 được thiết kế để khuyến khích và duy trì sự tương đồng giữa các mô-đun Python được sử dụng để truy cập cơ sở dữ liệu. Bằng cách này, tất cả các mô-đun tuân thủ các quy tắc được xác định trong Đặc tả API cơ sở dữ liệu Python v2.0 (PEP 249).
Trong hướng dẫn này, mình sẽ tập trung vào mô-đun "MySQL Connector Python". Mô-đun này được viết bằng Python thuần túy và có khả năng tự thực hiện các truy vấn cơ sở dữ liệu thông qua Python. Nó là trình điều khiển chính thức được Oracle hỗ trợ để làm việc với MySQL và Python. MySQL Connector Python tương thích với Python 3 và được duy trì tích cực.
Bài viết này được đăng tại [free tuts .net]
Ưu điểm và lợi ích của MySQL Connector Python:
- MySQL Connector Python được viết bằng Python thuần túy.
- Được hỗ trợ chính thức bởi Oracle cho việc làm việc với MySQL và Python.
- Tương thích với Python 3 và được duy trì tích cực.
Cách kết nối cơ sở dữ liệu MySQL bằng Python
Trước khi kết nối đến cơ sở dữ liệu MySQL từ Python, bạn cần biết các thông tin sau:
-
Tên tài khoản (Username): Tên người dùng mà bạn sử dụng để làm việc với MySQL Server. Tên người dùng mặc định cho cơ sở dữ liệu MySQL là "root".
-
Mật khẩu (Password): Mật khẩu được cung cấp tại thời điểm cài đặt máy chủ MySQL. Nếu bạn đang sử dụng tài khoản "root", bạn có thể không cần mật khẩu.
-
Tên máy chủ (Hostname): Tên máy chủ hoặc địa chỉ IP mà MySQL Server đang chạy. Nếu bạn đang chạy trên máy tính cục bộ, bạn có thể sử dụng "localhost" hoặc địa chỉ IP "127.0.0.1".
-
Tên cơ sở dữ liệu (Database Name): Tên của cơ sở dữ liệu mà bạn muốn kết nối và thực hiện các thao tác.
Dưới đây là các bước cơ bản để kết nối cơ sở dữ liệu MySQL bằng Python sử dụng mô-đun "MySQL Connector Python":
Bước 1: Cài đặt mô-đun kết nối MySQL
Trước tiên, bạn cần cài đặt mô-đun "MySQL Connector Python". Sử dụng lệnh pip để cài đặt:
pip install mysql-connector-python
Bước 2: Nhập mô-đun kết nối MySQL
Nhập mô-đun "mysql.connector
" bằng cách sử dụng câu lệnh import mysql.connector.
Điều này cho phép bạn sử dụng các phương thức và lớp được cung cấp bởi mô-đun này để giao tiếp với cơ sở dữ liệu MySQL.
Bước 3: Sử dụng phương thức connect()
Sử dụng phương thức connect()
của lớp mysql.connector
với các đối số cần thiết để kết nối đến cơ sở dữ liệu MySQL. Phương thức này sẽ trả về một đối tượng MySQLConnection
nếu kết nối được thiết lập thành công.
Bước 4: Sử dụng phương thức con trỏ (cursor())
Sử dụng phương thức cursor()
của đối tượng MySQLConnection
để tạo một đối tượng con trỏ. Đối tượng con trỏ này sẽ được sử dụng để thực hiện các truy vấn SQL khác nhau.
Bước 5: Sử dụng phương thức execute() và fetchall()
Các phương thức execute()
chạy các truy vấn SQL và trả về kết quả. Sau đó, bạn có thể sử dụng phương thức fetchall()
để trích xuất dữ liệu từ kết quả truy vấn.
Bước 6: Đóng các đối tượng con trỏ và kết nối
Sử dụng cursor.close()
để đóng đối tượng con trỏ và connection.close()
để đóng kết nối sau khi hoàn thành công việc.
Dưới đây là một ví dụ minh họa:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', user='your_username', password='your_password', database='your_database' ) if connection.is_connected(): db_info = connection.get_server_info() print("Connected to MySQL Server version ", db_info) cursor = connection.cursor() cursor.execute("SELECT * FROM your_table") records = cursor.fetchall() for record in records: print(record) except mysql.connector.Error as e: print("Error while connecting to MySQL:", e) finally: if connection.is_connected(): cursor.close() connection.close() print("MySQL connection is closed")
Đây là hướng dẫn cơ bản về cách kết nối cơ sở dữ liệu MySQL bằng Python bằng mô-đun "MySQL Connector Python". Hãy thay đổi các thông tin kết nối của bạn để phù hợp với cơ sở dữ liệu của bạn.
Kết quả
Connected to MySQL Server version 8.0.27 (1, 'John', 'Doe') (2, 'Jane', 'Smith') (3, 'Alice', 'Johnson') MySQL connection is closed
Kết quả này cho thấy bạn đã kết nối thành công đến máy chủ MySQL và truy vấn dữ liệu từ bảng your_table
, sau đó in ra các bản ghi trong kết quả.
Những điều cần nhớ:
-
Cài đặt mô-đun kết nối MySQL: Trước tiên, bạn cần cài đặt mô-đun "
mysql-connector-python
" bằng lệnhpip install mysql-connector-python.
-
Thông tin kết nối: Bạn cần biết các thông tin kết nối như tên tài khoản, mật khẩu, tên máy chủ, và tên cơ sở dữ liệu.
-
Kết nối và đóng kết nối: Sử dụng phương thức
connect()
để kết nối đến cơ sở dữ liệu MySQL vàclose()
để đóng kết nối sau khi hoàn thành công việc. Chắc chắn rằng bạn đã đóng kết nối để tránh tiêu tốn tài nguyên không cần thiết. -
Xử lý ngoại lệ: Luôn kiểm tra và xử lý các ngoại lệ có thể xảy ra khi kết nối cơ sở dữ liệu, ví dụ như sai tên người dùng hoặc mật khẩu, lỗi truy vấn, vv.
-
Sử dụng cursor: Sử dụng đối tượng con trỏ (cursor) để thực hiện các truy vấn SQL và trích xuất dữ liệu từ kết quả.
-
Đóng đối tượng con trỏ và kết nối: Đảm bảo bạn đóng đối tượng con trỏ và kết nối sau khi hoàn thành công việc để giải phóng tài nguyên và tránh lỗi.
-
Thay đổi thông tin kết nối: Thay đổi các thông tin kết nối như tên tài khoản, mật khẩu, hoặc tên cơ sở dữ liệu để phù hợp với môi trường cụ thể của bạn.
Nhớ tuân thủ các nguyên tắc cơ bản này để kết nối cơ sở dữ liệu MySQL bằng Python một cách hiệu quả và an toàn.
Tạo bảng MySQL từ Python
Trong phần này, mình sẽ học cách tạo bảng trong cơ sở dữ liệu MySQL từ Python. Hãy tạo bảng 'Laptop' trong cơ sở dữ liệu 'Electronics'.
Dưới đây là ví dụ về cách tạo bảng trong MySQL từ Python:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', database='Electronics', user='pynative', password='pynative@#29' ) mySql_Create_Table_Query = """CREATE TABLE Laptop ( Id int(11) NOT NULL, Name varchar(250) NOT NULL, Price float NOT NULL, Purchase_date Date NOT NULL, PRIMARY KEY (Id)) """ cursor = connection.cursor() cursor.execute(mySql_Create_Table_Query) print("Laptop Table created successfully") except mysql.connector.Error as error: print("Failed to create table in MySQL: {}".format(error)) finally: if connection.is_connected(): cursor.close() connection.close() print("MySQL connection is closed")
Khi bạn chạy ví dụ để tạo bảng MySQL từ Python, kết quả sẽ giống như sau:
Laptop Table created successfully MySQL connection is closed
Kết quả này cho thấy bạn đã tạo thành công bảng "Laptop" trong cơ sở dữ liệu MySQL của bạn. Bạn cũng có thông báo rằng kết nối MySQL đã được đóng sau khi công việc hoàn tất.
Nếu bạn kiểm tra trong cơ sở dữ liệu của mình, bạn sẽ thấy bảng "Laptop" với các cột và ràng buộc tương ứng đã được tạo.
Hoạt động CRUD của Python MySQL
Hoạt động CRUD (Create, Read, Update, Delete) là các hoạt động cơ bản khi làm việc với cơ sở dữ liệu. Dưới đây, tôi sẽ cung cấp ví dụ về cách thực hiện các hoạt động CRUD trong Python với cơ sở dữ liệu MySQL bằng mô-đun MySQL Connector Python.
Create (Tạo) - Chèn dữ liệu mới vào cơ sở dữ liệu:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', database='Electronics', user='pynative', password='pynative@#29' ) cursor = connection.cursor() # Thêm dữ liệu mới vào bảng insert_query = "INSERT INTO Laptop (Id, Name, Price, Purchase_date) VALUES (%s, %s, %s, %s)" record_to_insert = (1, 'Laptop A', 1000.0, '2023-09-08') cursor.execute(insert_query, record_to_insert) connection.commit() # Lưu thay đổi vào cơ sở dữ liệu except mysql.connector.Error as error: print("Lỗi khi thêm dữ liệu:", error) finally: if connection.is_connected(): cursor.close() connection.close()
Read (Đọc) - Truy vấn và đọc dữ liệu từ cơ sở dữ liệu:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', database='Electronics', user='pynative', password='pynative@#29' ) cursor = connection.cursor() # Truy vấn và đọc dữ liệu từ bảng select_query = "SELECT * FROM Laptop" cursor.execute(select_query) # Lấy tất cả các hàng từ kết quả records = cursor.fetchall() for record in records: print("ID:", record[0]) print("Name:", record[1]) print("Price:", record[2]) print("Purchase Date:", record[3]) except mysql.connector.Error as error: print("Lỗi khi đọc dữ liệu:", error) finally: if connection.is_connected(): cursor.close() connection.close()
Update (Cập nhật) - Cập nhật dữ liệu trong cơ sở dữ liệu:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', database='Electronics', user='pynative', password='pynative@#29' ) cursor = connection.cursor() # Cập nhật dữ liệu trong bảng update_query = "UPDATE Laptop SET Price = %s WHERE Name = %s" data_to_update = (1200.0, 'Laptop A') cursor.execute(update_query, data_to_update) connection.commit() except mysql.connector.Error as error: print("Lỗi khi cập nhật dữ liệu:", error) finally: if connection.is_connected(): cursor.close() connection.close()
Delete (Xóa) - Xóa dữ liệu khỏi cơ sở dữ liệu:
import mysql.connector try: connection = mysql.connector.connect( host='localhost', database='Electronics', user='pynative', password='pynative@#29' ) cursor = connection.cursor() # Xóa dữ liệu từ bảng delete_query = "DELETE FROM Laptop WHERE Name = %s" data_to_delete = ('Laptop A',) cursor.execute(delete_query, data_to_delete) connection.commit() except mysql.connector.Error as error: print("Lỗi khi xóa dữ liệu:", error) finally: if connection.is_connected(): cursor.close() connection.close()
Điều này là một hướng dẫn cơ bản về cách thực hiện hoạt động CRUD trong Python với cơ sở dữ liệu MySQL. Điều quan trọng là điều chỉnh câu lệnh SQL và thông tin kết nối để phù hợp với cơ sở dữ liệu của bạn.
Danh sách đối số kết nối Python MySQL
Dưới đây là một danh sách các đối số kết nối mà bạn có thể sử dụng khi kết nối đến cơ sở dữ liệu MySQL từ Python bằng MySQL Connector Python:
-
host
: Tên máy chủ hoặc địa chỉ IP của máy chủ MySQL. -
user
: Tên người dùng MySQL mà bạn sử dụng để đăng nhập vào máy chủ. -
password
: Mật khẩu được sử dụng cho tài khoản người dùng MySQL. -
database
: Tên cơ sở dữ liệu bạn muốn kết nối đến. -
port
: Cổng TCP/IP của máy chủ MySQL. Mặc định là 3306. -
use_unicode
: Xác định xem bạn muốn sử dụng Unicode hay không. Giá trị mặc định là True. -
charset
: Bộ ký tự MySQL để sử dụng cho kết nối. Giá trị mặc định là "utf8". -
autocommit
: Đặt thành True nếu bạn muốn tự động cam kết giao dịch. Giá trị mặc định là False. -
get_warnings
: Để tìm nạp cảnh báo. Mặc định là False. -
raise_on_warnings
: Đặt True nếu bạn muốn đưa ra ngoại lệ cho các cảnh báo. Mặc định là False. -
connection_timeout
: Thời gian chờ cho các kết nối ổ cắm TCP và Unix. -
buffered
: Nếu True, đối tượng con trỏ sẽ tìm nạp kết quả ngay sau khi thực hiện truy vấn. Giá trị mặc định là False. -
raw
: Nếu True, kết quả MySQL được trả về nguyên trạng thay vì chuyển đổi thành kiểu Python. Giá trị mặc định là False. -
force_ipv6
: Khi cài đặt thành True, sử dụng IPv6 khi một địa chỉ phân giải thành cả IPv4 và IPv6. Giá trị mặc định là False. -
pool_name
: Tên nhóm kết nối bạn đang tạo hoặc sử dụng. -
pool_size
: Kích thước nhóm kết nối mà bạn muốn tạo. Giá trị mặc định là 5. -
pool_reset_session
: Đặt lại các biến phiên khi kết nối được trả về nhóm. Mặc định là True. -
use_pure
: Xác định xem nên sử dụng Tiện ích mở rộng Python hay C thuần túy. Giá trị mặc định là False. -
unix_socket
: Vị trí của tệp ổ cắm Unix, cho phép giao tiếp giữa hai quá trình. -
auth_plugin
: Plugin xác thực để sử dụng. -
collation
: Đối chiếu MySQL để sử dụng. -
sql_mode
: Đặt biến phiên sql_mode tại thời điểm kết nối.
Bạn có thể chọn các đối số phù hợp với nhu cầu của bạn khi thiết lập kết nối MySQL từ Python.
Sử dụng Từ điển để giữ các đối số Kết nối MySQL
Bạn có thể sử dụng một từ điển để tổ chức và truyền các đối số kết nối MySQL khi bạn tạo kết nối từ Python. Dưới đây là một ví dụ về cách bạn có thể làm điều này:
import mysql.connector # Tạo một từ điển chứa các đối số kết nối MySQL config = { 'host': 'localhost', 'user': 'your_username', 'password': 'your_password', 'database': 'your_database', 'port': 3306, # Có thể cần điều chỉnh cổng nếu bạn sử dụng cổng khác 'charset': 'utf8', # Tuỳ chỉnh bộ ký tự nếu cần thiết } # Tạo kết nối đến cơ sở dữ liệu MySQL connection = mysql.connector.connect(**config) # Tạo con trỏ cho kết nối cursor = connection.cursor() # Bây giờ bạn có thể thực hiện các truy vấn và thao tác với cơ sở dữ liệu # Đừng quên đóng con trỏ và kết nối khi bạn hoàn thành cursor.close() connection.close()
Trong ví dụ trên, chúng tôi đã tạo một từ điển config
để chứa tất cả các đối số kết nối MySQL. Sau đó, chúng tôi đã sử dụng toán tử ** để truyền các giá trị từ từ điển config
vào hàm mysql.connector.connect().
Điều này giúp bạn quản lý các đối số kết nối một cách dễ dàng và dễ đọc hơn.
Thay đổi thời gian chờ kết nối MySQL từ Python
Để thay đổi thời gian chờ kết nối MySQL từ Python, bạn có thể sử dụng đối số connection_timeout
trong hàm mysql.connector.connect().
Đối số này đặt thời gian chờ kết nối theo giây. Dưới đây là một ví dụ về cách bạn có thể thực hiện điều này:
import mysql.connector try: # Đặt thời gian chờ kết nối thành 180 giây (3 phút) connection = mysql.connector.connect( host='localhost', user='your_username', password='your_password', database='your_database', connection_timeout=180 ) if connection.is_connected(): db_info = connection.get_server_info() print("Connected to MySQL Server version ", db_info) # Thực hiện các thao tác với cơ sở dữ liệu ở đây except mysql.connector.Error as e: print("Error while connecting to MySQL", e) finally: if connection.is_connected(): connection.close() print("MySQL connection is closed")
Trong ví dụ trên, chúng tôi đã đặt connection_timeout
thành 180 giây (3 phút) trong hàm mysql.connector.connect().
Điều này đảm bảo rằng thời gian chờ kết nối được đặt thành giá trị mong muốn của bạn.
Ngoài ra, bạn cũng có thể thay đổi các giá trị interactive_timeout
và wait_timeout
của máy chủ MySQL bằng cách thực hiện truy vấn SQL sau khi kết nối đã được thiết lập. Tuy nhiên, việc này cần quyền quản trị cơ sở dữ liệu và nó có thể ảnh hưởng đến tất cả các kết nối đến máy chủ.
Kết nối với MySQL bằng Trình kết nối Python C Tiện ích mở rộng
Để kết nối với MySQL bằng Python và trình kết nối C Tiện ích mở rộng (C Extension), bạn cần sử dụng thư viện mysql-connector-c. Dưới đây là hướng dẫn cách cài đặt và sử dụng nó:
Cài đặt mysql-connector-c
Trước tiên, bạn cần cài đặt mysql-connector-c
bằng lệnh pip:
pip install mysql-connector-c
Sử dụng mysql-connector-c trong mã Python
Sau khi cài đặt mysql-connector-c, bạn có thể sử dụng nó để kết nối đến cơ sở dữ liệu MySQL. Dưới đây là một ví dụ:
import mysql.connector from mysql.connector import MySQLConnection, Error def connect(): try: # Thông tin kết nối conn = MySQLConnection( user='your_username', password='your_password', host='localhost', database='your_database', port=3306 # Cổng mặc định của MySQL ) if conn.is_connected(): print("Connected to MySQL using C Extension") # Thực hiện các thao tác với cơ sở dữ liệu ở đây except Error as e: print("Error:", e) finally: if conn.is_connected(): conn.close() print("MySQL connection is closed") if __name__ == "__main__": connect()
Trong ví dụ trên, chúng ta đã sử dụng mysql.connector
để kết nối đến cơ sở dữ liệu MySQL bằng C Extension. Hãy đảm bảo thay đổi các thông số kết nối như user, password, host, database, và port để phù hợp với cấu hình cơ sở dữ liệu của bạn.
Với việc sử dụng C Extension, bạn có thể tận dụng hiệu suất tốt hơn trong việc kết nối đến MySQL từ Python.
Kết bài
Kết nối cơ sở dữ liệu MySQL từ Python thông qua MySQL Connector Python là một quá trình quan trọng cho các nhà phát triển và nhà quản trị dữ liệu. Việc này giúp tương tác với cơ sở dữ liệu MySQL, thực hiện truy vấn, cập nhật dữ liệu và quản lý dự án một cách dễ dàng. Sự kết hợp giữa sức mạnh của Python và khả năng của MySQL mở ra nhiều cơ hội cho việc phát triển các ứng dụng và dịch vụ dựa trên dữ liệu mạnh mẽ và hiệu quả.