Hướng dẫn pymysql read table - bảng đọc pymysql

Contents

  • 1 PyMySQL PyMySQL
  • 2 Cài đặt PyMySQL Cài đặt PyMySQL
  • 3 Ví dụ: PyMySQL version Ví dụ: PyMySQL version
    • 3.1 Tạo database trên MySQL Tạo database trên MySQL
    • 3.2 Script truy vấn version MySQL Script truy vấn version MySQL
  • 4 Ví dụ: PyMySQL fetchAll Ví dụ: PyMySQL fetchAll
    • 4.1 Tạo table trên MySQL Tạo table trên MySQL
    • 4.2 Truy vấn data bằng PyMySQL Truy vấn data bằng PyMySQL
  • 5 PyMySQL – Con trỏ dictionary PyMySQL – Con trỏ dictionary
  • 6 PyMySQL – Hiển thị header PyMySQL – Hiển thị header
  • 7 PyMySQL – Truy vấn database theo giá trị PyMySQL – Truy vấn database theo giá trị
  • 8 PyMySQL – Đếm cố lượng hàng PyMySQL – Đếm cố lượng hàng
  • 9 PyMySQL – Chèn row table PyMySQL – Chèn row table

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+.
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 PyMySQL

Trong 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 version

Trong 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 ‘testdb’ với username ‘user3’ và password ‘1qazse4’
– Viết script Python truy vấn version MySQL

Tạo database trên MySQL

0. Download và install MySQL

1. Tạo database với tên ‘testdb’ $ mysql> CREATE DATABASE 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’;
$ 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’;
$ 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 MySQL

version.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
– 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ả:
Kết quả:

C:\Programs\Python\Python38-32>python.exe version.py
Database version: 8.0.21

Ví dụ: PyMySQL fetchAll

Phươ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
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 MySQL

1. Để tạo table, các bạn chạy command sau mysql> CREATE TABLE city (no INT, city VARCHAR(20), area FLOAT);
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;
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′);
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 PyMySQL

fetch_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
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ỏ dictionary

Con 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
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
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.
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 pymysql
0

Tên cột trong table được gọi là metadata, được lấy từ con trỏ object ‘cur’

import pymysql
1

Thuộc tính description của con trỏ ‘cur’ trả về thông tin các column trong table.

import pymysql
2

In tên column theo định dạng sử dụng f-string.

import pymysql
3

Duyệt dữ liệu từng hàng trong table và in ra màn hình console Kết quả như sau:
Kết quả như sau:

import pymysql
4

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.
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 pymysql
5

Trong ví dụ này, chúng ta truy vấn row dữ liệu với ‘no’=3

import pymysql
6

Câu lệnh thực hiện truy vấn row dữ liệu có ‘no’=3 Kết quả:
Kết quả:

import pymysql
7

PyMySQL – Đếm cố lượng hàng

Thuộ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
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 pymysql
8

Trong ví dụ truy vấn 3 hàng 1,2,3 Kết quả:
Kết quả:

import pymysql
9

PyMySQL – Chèn row table

Hà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.
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ả:
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