Hướng dẫn pymysql read table - bảng đọc pymysql
Contents Show
Bài hướng dẫn này chỉ ra cách lập trình MySQL bằng Python với thư viện PyMySQL. PyMySQL là thư viện MySQL client được tích hợp trong Python. Hầu hết các API tương thích với mysqlclient và MySQLdb. yMySQL làm việc với MySQL 5.5+ và MariaDB 5.5+. MySQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở hàng đầu, là một hệ quản trị cơ sở dữ liệu đa người dùng, đa luồng. MySQL đặc biệt phổ biến trên web. Cài đặt PyMySQLTrong folder cài Python, tích hợp module pip. Trên Windows, bạn chạy command pip để cài đặt PyMySQL như sau C:\Programs\Python\Python38-32\Scripts>pip install pymysql Collecting pymysql Downloading PyMySQL-0.10.0-py2.py3-none-any.whl (47 kB) |████████████████████████████████| 47 kB 227 kB/s Installing collected packages: pymysql Successfully installed pymysql-0.10.0 Ví dụ: PyMySQL versionTrong ví dụ này, chúng ta truy vấn version MySQL. Để thực hiện, chúng ta cần làm 2 bước – Tạo database ‘testdb’ với username ‘user3’ và password ‘1qazse4’ – Viết script Python truy vấn version MySQL Tạo database trên MySQL0. Download và install MySQL 1. Tạo database với tên ‘testdb’ $ mysql> CREATE DATABASE testdb; 2. Tạo user ‘user3’ với password là ‘1qazse4’ $ mysql> CREATE USER ‘testdb’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘1qazse4’; 3. Grant quyền read/write cho user3 $ mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON testdb.* TO ‘user3’@’localhost’; Script truy vấn version MySQLversion.py import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close() Trong MySQL, chúng ta sử dụng SELECT VERSION() để lấy version của MySQL import pymysql Import thư viện pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') Chúng ta kết nối database ‘testdb’ với hàm pymysql.connect() với 4 tham số – hostname: ‘localhost’ – MySQL username: ‘user3’ – password: ‘1qazse4’ – database name: testdb with con.cursor() as cur: Với việc sử dụng keyword with, trình thông dịch Python giải phóng resource. Nó cũng cung cấp cơ chế xử lí error. Chúng ta lấy con trỏ object ‘cur’, được sử dụng để truy xuất bản ghi. cur.execute('SELECT VERSION()') Chúng ta gọi hàm execute thông qua con trỏ object ‘cur’ và thực thi câu lệnh SQL. version = cur.fetchone() Hàm fetchone() lấy hàng kế tiếp trong set kết quả truy vấn database, trả về giá trị hàng đó, hoặc không có giá trị khi không có data. print(f'Database version: {version[0]}') In version MySQL finally: con.close() Module pymysql không implement việc tự động xử lý việc giải phóng resource, chúng ta cần phải close kết nối database bằng hàm close(). Kết quả: C:\Programs\Python\Python38-32>python.exe version.py Database version: 8.0.21 Ví dụ: PyMySQL fetchAllPhương thức fetchAll truy xuất tất cả các hàng của một kết quả truy vấn, trả về chúng dưới dạng mảng các chuỗi. Chúng ta cần làm 2 bước: – Tạo table city trong database ‘testdb’ được tạo ở trên, gồm 3 trường: no (số thứ tự), city (tên thành phố), area (diện tích) trên MySQL Server – Viết script Python truy vấn MySQL Server và hiển thị ra màn hình console Tạo table trên MySQL1. Để tạo table, các bạn chạy command sau mysql> CREATE TABLE city (no INT, city VARCHAR(20), area FLOAT); 2. Hiển thị các trường trong table city mysql> describe city; import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()0 3. Import data vào table city mysql> INSERT INTO city VALUES (‘1′,’An Giang’,’3536.5′); mysql> INSERT INTO city VALUES (‘2′,’Bac Lieu’,’2669.3′); mysql> INSERT INTO city VALUES (‘3′,’Bac Giang’,’3851.7′); Truy vấn data bằng PyMySQLfetch_all.py import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()1 Trong ví dụ, truy vấn tất cả các data từ table city import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()2 Câu lệnh lựa chọn dữ liệu từ table city import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()3 Hàm fetchall lấy tất cả các record và trả về kế quả. Kết quả truy vấn được lưu vào mảng tuple. Mỗi tuple lưu record 1 hàng trong table. import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()4 Chúng ta in dữ liệu ra màn hình console Kết quả chạy script import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()5 PyMySQL – Con trỏ dictionaryCon trỏ mặc định trả về dữ liệu trong mảng tuple. Khi chúng ta sử dụng con trỏ dictionary, dữ liệu trả về lưu trong dictionary. Với các lưu trữ dữ liệu trong dictionary, chúng ta có thể tham chiếu dữ liệu bằng tên column.Note: Trong ví dụ này, chúng ta vẫn sử dụng database ‘testdb’ và table ‘city’ trong ví dụ trên. dictionary_cursor.py import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()6 Trong ví dụ này, chúng ta truy vấn hàng đầu tiên trong table ‘city’ bằng việc sử dụng con trỏ dictionary trong Python. import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()7 Chúng ta truyền thêm giá trị pymysql.cursors.DictCursor cho tham số cursorclass. import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()8 Truy vấn và in data ở 2 cột no(số thứ tự) và city (tên thành phố) Kết quả chỉ có dữ liệu 2 cột no và city được in ra import pymysql con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb') try: with con.cursor() as cur: cur.execute('SELECT VERSION()') version = cur.fetchone() print(f'Database version: {version[0]}') finally: con.close()9 Trong ví dụ này minh họa cách hiển hiện header no (số thứ tự), city (tên thành phố) và area (diện tích) cùng với dữ liệu trong table ‘city’Note: Trong ví dụ này, chúng ta vẫn sử dụng database ‘testdb’ và table ‘city’ trong ví dụ trên. column_headers.py import pymysql0 Tên cột trong table được gọi là metadata, được lấy từ con trỏ object ‘cur’ import pymysql1 Thuộc tính description của con trỏ ‘cur’ trả về thông tin các column trong table. import pymysql2 In tên column theo định dạng sử dụng f-string. import pymysql3 Duyệt dữ liệu từng hàng trong table và in ra màn hình console Kết quả như sau: import pymysql4 PyMySQL – Truy vấn database theo giá trịỞ các ví dụ trên, chúng ta truy vấn table trong database, không đảm bảo security và performance. Ví dụ này minh họa cách truy vấn hàng dữ liệu trong table dựa vào giá trị truyền vào. Note: Trong ví dụ này, chúng ta vẫn sử dụng database ‘testdb’ và table ‘city’ trong ví dụ trên. prepared.py import pymysql5 Trong ví dụ này, chúng ta truy vấn row dữ liệu với ‘no’=3 import pymysql6 Câu lệnh thực hiện truy vấn row dữ liệu có ‘no’=3 Kết quả: import pymysql7 PyMySQL – Đếm cố lượng hàngThuộc tính cur.rowcount chỉ ra số lượng hàng trong table được tạo ra bằng command SQL: SELECT, UPDATE, hoặc INSERT Note: Trong ví dụ này, chúng ta vẫn sử dụng database ‘testdb’ và table ‘city’ trong ví dụ trên. affected_rows.py import pymysql8 Trong ví dụ truy vấn 3 hàng 1,2,3 Kết quả: import pymysql9 PyMySQL – Chèn row tableHàng mới được chèn vào table database bằng lệnh INSERT INTO Note: Trong ví dụ này, chúng ta vẫn sử dụng database ‘testdb’ và table ‘city’ trong ví dụ trên. insert_row.py con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb')0 Ví dụ minh họa cách chèn hàng dữ liệu mới (4, ‘Thai Nguyen’, 3536.4) vào table database con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb')1 Trong pymysql, mặc định tính năng autocomit bị disable. Do vậy, cần gọi hàm commit() để thực thi việc thay đổi. Kết quả: con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb')2 Các bạn chạy lại script ở trên để in ra dữ liệu table ‘city’ gồm 4 hàng con = pymysql.connect('localhost', 'user3', '1qazse4', 'testdb')3 |