Bài 48: Tương tác Python với Cơ sở dữ liệu MySQL Server -Phần 1

Ở các bài học trước, các bạn đã biết cách cài đặtsử dụng MySQL Server, MySQL WorkBench. Biết cách tạo Cơ sở dữ liệu bảng, thuộc tính, các thao tác trong bảng dữ liệu như Xem, thêm, sửa, xóa, sắp xếp… ngay trong công cụ MySQL Workbench.

Bài học này Chúng ta bắt đầu sử dụng ngôn ngữ lập trình Python để tương tác cơ sở dữ liệu MySQL Server “studentmanagement” đã thực hiện ở bài trước. Việc tương tác này có nhiều cấp độ, bài học này ta sẽ nghiên cứu các thư viện và mã lệnh để kết nối và tương tác dữ liệu trực tiếp bằng Python, cũng như phân trang dữ liệu. Các bài sau chúng ta sẽ nghiên cứu sâu hơn, chẳng hạn như mô hình hóa hướng đối tượng, cấu trúc các mã lệnh thành các thư viện để tối ưu hóa hệ thống phần mềm. Trong bài này, Tui hướng dẫn lập trình các chức năng sau:

(1) Lập trình Python kết nối MySQL Server

(2) Lập trình Python truy vấn dữ liệu MySQL Server

(3) Lập trình Python thêm mới dữ liệu MySQL Server

(4) Lập trình Python cập nhật dữ liệu MySQL Server

(5) Lập trình Python xóa dữ liệu MySQL Server

Trước tiên, chúng ta cần cài đặt thư viện kết nối và tương tác MySQL Server, có nhiều thư viện nhưng ở đây chúng ta thống nhất sử dụng thư viện mysql.connector và thư viện này sẽ được sử dụng xuyên suốt các bài học còn lại, cũng như ứng dụng trong thống kê và máy học.

Ta sử dụng lệnh sau để cài đặt:

python -m pip install mysql-connector-python

(1) Lập trình Python kết nối MySQL Server

Nếu bạn nào chưa có dữ liệu “studentmanagement” có thể dùng chức năng Import/Export được học ở bài trước, để import dữ liệu:

https://tranduythanh.com/datasets/studentmanagement.rar

Các thông số server, port, database, user, password… ta đã cài đặt ở các bài học trước, nên bài này ta sử dụng. Tùy vào máy tính của bạn lúc cài đặt phần mềm như thế nào thì khai báo các thông số cho chính xác. Tui đã chủ ý khai báo các biến riêng biệt để bạn chỉ cần thay thế giá trị theo máy tính mà mình đã cài đặt MySQL Server. Để kết nối tới cơ sở dữ liệu MySQL ta tạo file “TestQueryMySQL.py” và viết mã lệnh như sau:

import mysql.connector

server="localhost"
port=3306
database="studentmanagement"
username="root"
password="@Obama123"

conn = mysql.connector.connect(
                host=server,
                port=port,
                database=database,
                user=username,
                password=password)

Lệnh connect() ở trên trả về một MySQLConnection. Nếu kết nối thất bại chương trình sẽ thông báo lỗi. Trong giới hạn của bài học này, để cho nó đơn giản, dễ hiểu thì Tui bỏ qua hết các handle exception, tập trung vào các mã lệnh cốt lõi mà ở đó ta đã kết nối tới MySQL Server thành công. Các bài học sau Tui sẽ bổ sung thêm các checked erros này.

Bây giờ ta sử dụng đối tượng conn ở trên để thực hiện các tương tác CRUD dưới đây:

(2) Lập trình Python truy vấn dữ liệu MySQL Server

(2.1) Truy vấn toàn bộ Sinh viên:

cursor = conn.cursor()

sql="select * from student"
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi lệnh trên ta có kết quả:

(2.2) Truy vấn các Sinh viên có độ tuổi từ 22 tới 26:

cursor = conn.cursor()
sql="SELECT * FROM student where Age>=22 and Age<=26"
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi lệnh trên ta có kết quả:

(2.3) Truy vấn toàn bộ sinh viên và sắp xếp theo tuổi tăng dần:

cursor = conn.cursor()
sql="SELECT * FROM student " \
    "order by Age asc"
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi lệnh trên ta có kết quả:

(2.4) Truy vấn các Sinh viên có độ tuổi từ 22 tới 26 và sắp xếp theo tuổi giảm dần:

cursor = conn.cursor()
sql="SELECT * FROM student " \
    "where Age>=22 and Age<=26 " \
    "order by Age desc "
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi lệnh trên ta có kết quả:

(2.5) Truy vấn chi tiết thông tin Sinh viên khi biết Id:

Ví dụ lấy chi tiết Sinh viên khi biết ID=1

cursor = conn.cursor()
sql="SELECT * FROM student " \
    "where ID=1 "

cursor.execute(sql)

dataset=cursor.fetchone()
if dataset!=None:
    id,code,name,age,avatar,intro=dataset
    print("Id=",id)
    print("code=",code)
    print("name=",name)
    print("age=",age)

cursor.close()

Thực thi lệnh trên ta có kết quả:

(2.6) Truy vấn dạng phân trang Student:

Trong trường hợp dữ liệu nhiều, ta có thể phân thành nhiều đợt truy vấn dữ liệu thông qua từ khóa limit và offset, nó còn được gọi là paging.

Ví dụ: Dữ liệu trong bảng Sinh viên có 6 phần tử, ta muốn truy vấn 2 lần, mỗi lần 3 phần tử:

Lần thứ nhất truy vấn 3 dòng dữ liệu đầu tiên (các ID 1, 2, 3) thì câu SQL viết như sau:

sql="SELECT * FROM student LIMIT 3 OFFSET 0"

Ta thử nghiệm chi tiết:

cursor = conn.cursor()
sql="SELECT * FROM student LIMIT 3 OFFSET 0"
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi coding ở trên ta có kết quả:

Lần thứ nhì truy vấn 3 dòng dữ liệu còn lại (các ID 4, 5, 6) thì câu SQL viết như sau:

sql="SELECT * FROM student LIMIT 3 OFFSET 3"

Ta thử nghiệm chi tiết:

cursor = conn.cursor()
sql="SELECT * FROM student LIMIT 3 OFFSET 3"
cursor.execute(sql)

dataset=cursor.fetchall()
align='{0:<3} {1:<6} {2:<15} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for item in dataset:
    id=item[0]
    code=item[1]
    name=item[2]
    age=item[3]
    avatar=item[4]
    intro=item[5]
    print(align.format(id,code,name,age))

cursor.close()

Thực thi coding ở trên ta có kết quả:

Tức là LIMIT là số phần tử mà ta muốn truy vấn.

OFFSET là vị trí ta bắt đầu truy vấn.

Giả sử ta có N dòng Sinh viên, mỗi lần truy vấn là 3 sinh viên, hãy viết lệnh SQL để chương trình Paging toàn bộ dữ liệu N dòng này:

print("PAGING!!!!!")
cursor = conn.cursor()
sql="SELECT count(*) FROM student"
cursor.execute(sql)
dataset=cursor.fetchone()
rowcount=dataset[0]

limit=3
step=3
for offset in range(0,rowcount,step):
    sql=f"SELECT * FROM student LIMIT {limit} OFFSET {offset}"
    cursor.execute(sql)

    dataset=cursor.fetchall()
    align='{0:<3} {1:<6} {2:<15} {3:<10}'
    print(align.format('ID', 'Code','Name',"Age"))
    for item in dataset:
        id=item[0]
        code=item[1]
        name=item[2]
        age=item[3]
        avatar=item[4]
        intro=item[5]
        print(align.format(id,code,name,age))

cursor.close()

Thực thi lệnh PAGING trên ta có kết quả:

Mã lệnh ở trên hay ở chỗ nào?

Hay ở chỗ nếu như ta muốn phân trang bao nhiêu phần tử thì chỉ cần đổi limit và offset là được. Ví dụ như muốn phân trang mỗi lần chạy truy vấn 50 Sinh viên thì đổi limit=50 và step=50 (Bạn thấy Gmail không? email rất nhiều, nhưng mỗi lần họ cho truy vấn xem 50 email, muốn xem trước sau thì bấm nút. Đó là minh họa PAGING)

Source code dầy đủ cho phần kết nối và truy vấn dữ liệu:

https://www.mediafire.com/file/zf7qlx2rm4tgqri/TestQueryMySQL.py/file

(3) Lập trình Python thêm mới dữ liệu MySQL Server:

(3.1) Thêm mới 1 Student

Chúng ta sẽ viết mã lệnh để thêm mới 1 Student theo cú pháp như dưới đây:

cursor = conn.cursor()

sql="insert into student (code,name,age) values (%s,%s,%s)"

val=("sv07","Trần Duy Thanh",45)

cursor.execute(sql,val)

conn.commit()

print(cursor.rowcount," record inserted")

cursor.close()

Ở trên ta thấy, val là 1 tuple chưa thông tin của Student. Lưu ý rằng câu lệnh insert ở trên chỉ thêm code, name, age (không thấy ID vì nó tự động tăng, đồng thời avatar và intro Tui cũng không thêm mới tức là nó sẽ có giá trị null tự động)

Câu lệnh insert SQL dùng 3 biến, thì val sẽ cần 1 tuple có 3 thành phần như code minh họa.

Khi gọi lệnh cursor.execute(sql,val) thì chương trình sẽ tự động mapping giá trị trong tuple cho các %s

lệnh conn.commit() để xác thực là sẽ lưu mới dữ liệu

lệnh cursor.rowcount cho chúng ta biết có bao nhiêu dòng dữ liệu được thay đổi trong cơ sở dữ liệu.

Thực thi lệnh trên ta có kết quả:

(3.2) Thêm mới nhiều Student:

cursor = conn.cursor()

sql="insert into student (code,name,age) values (%s,%s,%s)"

val=[
    ("sv08","Trần Quyết Chiến",19),
    ("sv09","Hồ Thắng",22),
    ("sv10","Hoàng Hà",25),
     ]

cursor.executemany(sql,val)

conn.commit()

print(cursor.rowcount," record inserted")

cursor.close()

Mã lệnh trên có 2 chỗ khác biệt:

  • Chỗ thứ nhất đó là val trở thành 1 mảng các Tuple
  • chỗ thứ nhì là ta sử dụng hàm cursor.executemany(sql,val)

Thực thi lệnh ta có kết quả:

Source code toàn bộ phần Insert Student các bạn có thể tải ở đây:

https://www.mediafire.com/file/839moz9a83bjiau/TestInsertMySQL.py/file

(4) Lập trình Python cập nhật dữ liệu MySQL Server

(4.1) Cập nhật tên Sinh viên có Code=’sv09′ thành tên mới “Hoàng Lão Tà”

cursor = conn.cursor()
sql="update student set name='Hoàng Lão Tà' where Code='sv09'"
cursor.execute(sql)

conn.commit()

print(cursor.rowcount," record(s) affected")

Thực thi mã lệnh trên ta có kết quả:

(4.2) Cập nhật tên Sinh viên có Code=’sv09′ thành tên mới “Hoàng Lão Tà” như viết dạng SQL Injection:

cursor = conn.cursor()
sql="update student set name=%s where Code=%s"
val=('Hoàng Lão Tà','sv09')

cursor.execute(sql,val)

conn.commit()

print(cursor.rowcount," record(s) affected")

Source code toàn bộ phần Update Student các bạn có thể tải ở đây:

https://www.mediafire.com/file/5fes444erp2v4s3/TestUpdateMySQL.py/file

(5) Lập trình Python xóa dữ liệu MySQL Server

(5.1) Xóa Student có ID=14

conn = mysql.connector.connect(
                host=server,
                port=port,
                database=database,
                user=username,
                password=password)
cursor = conn.cursor()
sql="DELETE from student where ID=14"
cursor.execute(sql)

conn.commit()

print(cursor.rowcount," record(s) affected")

Thực hiện mã lệnh trên ta có kết quả:

(5.2) Xóa Student có ID=13 với SQL Injection

conn = mysql.connector.connect(
                host=server,
                port=port,
                database=database,
                user=username,
                password=password)
cursor = conn.cursor()
sql = "DELETE from student where ID=%s"
val = (13,)

cursor.execute(sql, val)

conn.commit()

print(cursor.rowcount," record(s) affected")

Sourecode đầy đủ phần xóa ở đây:

https://www.mediafire.com/file/qgr8ko351nhmho9/TestRemoveMySQL.py/file

Như vậy, tới đây Tui đã hướng dẫn đầy đủ và chi tiết các câu lệnh SQL liên quan tới CRUD để tương tác dữ liệu, sử dụng Python để triệu gọi lệnh.

Hầu hết các lệnh cốt lõi về tương tác Python với MySQL Server các bạn đã nắm, chỉ cần làm tốt cá lệnh này là hầu hết mọi yêu cầu liên quan tới viết phần mềm quản trị hệ thống là bạn có thể thực hiện được.

Bài học sau Tui sẽ nâng cấp bài này bằng cách mô hình hóa hướng đối tượng, sau đó thiết kế giao diện tương tác người dùng, rồi cuối cùng là tích hợp mô hình máy học, thống kê.

Các bạn chú ý theo dõi

Chúc các bạn thành công

Bài 47: Sử dụng hệ quản trị Cơ sở dữ liệu MySQL Server-MySQL Workbench

Trong bài học 46, chúng ta đã cài đặt thành công MySQL Server và MySQL Workbench, bài học này Tui sẽ hướng dẫn cách sử dụng công cụ MySQL Workbench để tương tác và quản lý cơ sở dữ liệu MySQL Server. Các hướng dẫn tập trung vào những thao tác sau:

(1) Kết nối MySQL Server

(2) Tạo và cấu hình Schema

(3) Tạo và cấu hình Table

(4) Các thao tác CRUD bằng visualization

(5) Các thao tác CRUD bằng cách viết SQL Script

(6) Cách Export và Import Schema

Ta bắt đầu thao tác theo hướng dẫn chi tiết dưới đây:

(1) Kết nối MySQL Server:

Khởi động MySQL Workbench lên ta thấy giao diện Welcome to MySQL Workbench như bên dưới:

Nhấn chọn biểu tượng “(+)” ở trên để cài đặt Connection, giao diện Setup New Connection hiển thị ra như dưới đây:

Ta bấm chọn nút lệnh “Store In Vault” để mở cửa sổ “Store Password For Connection’:

Ta nhập mật khẩu @Obama123 đã cấu hình lúc cài đặt MySQL Server ở bài 46, rồi nhấn OK để quay trở lại màn hình Setup New Connection:

Để kiểm tra kết nối tới MySQL Server có thành công hay không ta nhấn nút lệnh “Test Connection“, nếu màn hình thông báo kết nối thành công xuất hiện như dưới đây thì ta đã hoàn tất quá trình cấu hình kết nối MySQL Server:

Nhấn “Ok” để quay trở về màn hình Setup New Connection:

Đặt tên Connection Name “MyConnection” Nhấn OK, để quay trở lại màn hình Welcome to MySQL Workbench:

Lúc này hệ thống sẽ xuất hiện khung lệnh kết nối “MyConnection” như màn hình trên, ta nhấn vào nó để kết nối và mở màn hình quản trị hệ quản trị cơ sở dữ liệu MySQL Server:

Mặc định hệ thống có 3 SChema là “sakila”, “world” và “sys”.

(2) Tạo và cấu hình Schema:

Giả sử ta tạo Schema mới tên là “StudentManagement

Để tạo mới Schema ta có nhiều cách, cách nhanh nhất là nhấn vào biểu tượng “Create a new schema in the connected server” trong thanh toolbar:

Màn hình tạo Schema hiện thị ra như đưới đây:

  • Mục name: Ta đặt tên schema là “StudentManagement
  • Mục Charset/Collation: Ta chọn utf8 tương ứng như hình

Sau đó nhấn nút Apply, màn hình thông báo Apply Changes to Object xuất hiện ra như dưới đây:

Sau khi nhấn OK, màn hình Apply SQL Script to Database sẽ hiển thị bước “Reviewing the SQL Script to be Applied on the Database” ra như dưới đây:

Nhấn nút “Apply” để hiển thị bước “Applying SQL script to the database”:

Nhấn nút “Finish” để hoàn tất, ta có kết quả là schema “studentmanagement” được tạo ra như dưới đây:

Bây giờ ta qua chức năng tạo các Tables cho Schema studentmanagement

(3) Tạo và cấu hình Table:

Để tạo 1 Table mới, ta nhấn chuột phải vào Tables/Sau đó chọn Create Table…. như hình dưới đây:

Lúc này màn hình tạo Table mới hiện thị ra như dưới đây:

  • Mục số 1: là nơi ta đặt tên Table và thiết lập Charset cho Table. Ví dụ ta đặt tên table là “student” và Charset chọn utf8
  • Mục số 2: Là các cột/thuộc tính của table “Student“, giả sử ta có 3 thuộc tính là ID, Code, Name. Bạn nhập trực tiếp vào Column Name, và chỉnh DataType như hình. Lưu ý ID có biểu tượng chìa khóa màu vàng ở đằng trước là vì ta thiết lập nó là khóa chính (tick vào PK), NN (not null), AI (Auto Increment) tự động tăng khi phát sinh dòng dữ liệu mới

Sau đó ta nhấn nút “Apply“, màn hình Apply changes to Object sẽ hiển thị như dưới đây:

Nhấn nút OK, màn hình “Review the SQL Script to be Applied on the Database” xuất hiện như dưới đây:

Ta nhấn nút “Apply”, màn hình “Applying SQL script to the database” xuất hiện như dưới đây:

Ta nhấn “Finish” để hoàn tất quá trình tạo bảng student. Kết quả hiện thị như màn hình dưới đây:

Tuy nhiên, không phải lúc nào ta cũng tạo 1 lần là chính xác hay hiện thiện luôn bảng dữ liệu, mà ta thường làm thiếu hoặc sai và cần bổ sung hay chỉnh sửa. Để làm điều này ta chọn chức năng “Alter Table“:

Bấm chuột phải vào bảng “student” rồi chọn “Alter Table…”

Giả sử rằng ta muốn hiệu chỉnh cấu trúc bảng student như dưới đây:

Ta cấu hình thêm Age, Avatar và Intro, đồng thời hiệu chỉnh Datatype cho Name như hình.

Sau đó lặp lại thao tác nhấn nút “Apply”, rồi “Finish” ta có kết quả:

Như vậy tới đây ta đã biết cách tạo và hiệu chỉnh cấu trúc Table.

(4) Các thao tác CRUD bằng visualization:

Phần này Tui sẽ hướng dẫn các bạn các thao tác Xem, thêm, sửa, xóa dữ liệu (CRUD) bằng công cụ visualization.

  • C (Create, tương ứng với lệnh insert) là thêm mới dữ liệu
  • R (Retrieve, Read, tương ứng với select) là xem, truy vấn dữ liệu
  • U (Update, tương ứng với lệnh update) là cập nhật dữ liệu
  • D (Delete, tương ứng với lệnh delete) là xóa dữ liệu

Để xem dữ liệu trong bảng (R) hoặc cập nhật dữ liệu (U) ta bấm chuột phải vào bảng rồi chọn “Select rows – Limit 1000“:

Để thêm mới dữ liệu hoặc chỉnh sửa dữ liệu, ngay trong mục số 2 ta nhập dữ liệu mới hoặc chỉnh sửa dữ liệu. Cột ID là Auto Increment nên ta không cần nhập, ta nhập dữ liệu cho các ô Code, Name, Age, Avatar, Intro:

Bạn cứ nhận dữ liệu bao nhiêu tùy thích, sau đó nhấn nút “Apply”, màn hình “Review the SQL Script” xuất hiện như dưới đây:

Nhấn nút “Apply”, màn hình “Applying SQL script to the database” xuất hiện:

Sau khi bấm “Finish” ta có kết quả:

Để xóa (D) dữ liệu dòng nào đó, ta bấm chuột phải vào dòng đó rồi chọn “Delete Row(s)”, muốn xóa nhiều dòng thì bôi đen nhiều dòng:

Sau khi bấm Delete Row(s), ta cần lặp lại tao tác nhấn nút “Apply” rồi “Finish” như chức năng thêm mới hay cập nhật dữ liệu.

Ngoài ra, các thao tác Xem, thêm, sửa, xóa ta có thể làm trong nhóm Form Editor:

Ở giao diện trên, bạn có thể nhấn vào biểu tượng Xóa dữ liệu “-” và biểu tượng thêm mới dữ liệu “+”, có thể chỉnh sửa trực tiếp trong các ô dữ liệu. Sau đó nhấn nút “Apply” như các chức năng trước.

(5) Các thao tác CRUD bằng cách viết SQL Script:

Trước tiên chúng ta cần thiết lập default cho Schema:

Bấm chuột phải vào cơ sở dữ liệu/ chọn Set as Default Schema.

khi thiết lập default, thì mọi thác tác ngầm định sẽ ảnh hưởng trên Schema này.

(5.1) Truy vấn dữ liệu bằng SQL Script

  • Truy vấn toàn bộ sinh viên:
SELECT * FROM student;

Sau khi gõ lệnh truy vấn, ta nhấn biểu tượng execute để xem kế quả:

  • Truy vấn các Sinh viên có độ tuổi từ 22 tới 26
SELECT * FROM student where Age>=22 and Age<=26;

Viết xong mã lệnh, ta bấm biểu tượng execute để xem kết quả:

  • Truy vấn toàn bộ sinh viên và sắp xếp theo tuổi tăng dần:
SELECT * FROM student 
order by Age asc

Thực thi lệnh trên ta có kết quả:

  • Truy vấn các Sinh viên có độ tuổi từ 22 tới 26 và sắp xếp theo tuổi giảm dần
SELECT * FROM student 
where Age>=22 and Age<=26 
order by Age desc 

Chạy mã lệnh để xem kết quả thực hiện:

(5.2) Cập nhật dữ liệu bằng SQL Script

Với chức năng cập nhật và xóa, thì đa phần trong các trường hợp MySQL Server sẽ bảo vệ dữ liệu vì sợ ta cập nhật và xóa bậy bạ, ta bỏ chức năng này đi để thử nghiệm:

Vào menu Edit/ chọn Preferences….

Sau đó nhấn vào SQL Editor:

Unchecked “Safe Updates (rejects UPDATEs and DELETEs with no restrictions)” rồi bấm OK

Đóng và Khởi động lại MySQL Workbench (bắt buộc)

  • Sửa tên Sinh viên có mã “sv06” thành “Obama”
update student 
set Name="Obama"
where ID=6

Sau khi thực thi xong câu lệnh Update, ta xem lại câu truy vấn sẽ có kết quả được thay đổi:

(5.3) Xóa dữ liệu bằng SQL Script

Xóa Sinh viên có Code sv06

delete from student
where Code="sv06"

Thực thi lệnh trên xong, sau đó truy vấn lại ta thấy sinh viên sv06 đã bị xóa:

(6) Cách Export và Import Schema:

Cuối cùng ta vào chức năng Export vào Import. Đây là các chức năng quan trọng và tiện lợi, vì ta cần phải di chuyển dữ liệu:

(6.1) Export Schema

Để Export Schema: Ta vào menu Server -> chọn Export Data

Màn hình Data Export xuất hiện ra như dưới đây:

(1)Ta tick chọn Schema muốn Export

(2)Chọn Dump Structure and Data

(3)Chọn nơi lưu trữ dữ liệu Export

(4)Sau đó nhấn nút “Start Export”

Lưu ý rằng, một số Laptop độ phân giải yếu, cần chỉnh lại Resolution mới thấy nút “Start Export”

Ta thấy kết quả báo như dưới đây là thành công:

Ta vào Windows Explorer sẽ thấy thư mục chứa dữ liệu vừa Export:

Ta có thể sao chép, lưu trữ, di chuyển dữ liệu Export này tới bất kỳ nơi đâu, có thể chuyển qua máy tính khác. Ví dụ như làm việc nhóm, ta có thể lấy dữ liệu trong máy của thành viên này qua máy của thành viên khác.

(6.2) Import Schema

Giả sử ta cần import Schema vừa export kia vào 1 máy tính khác:

Máy tính này phần mềm MySQL Server chưa có Schema “studentmanagement”

Ta vào menu Server/chọn Data Import:

Chức năng import sẽ hiện thị ra như dưới đây:

Ta bấm vào nút “New” để tạo Schema mới, trong màn hình Create Schema ta đặt tên “studentmanagement” rồi bấm nút Ok, kết quả hiển thị ra như bên dưới:

Ở màn hình trên ta cần làm các thao tác sau:

(1)Trỏ tới thư mục lưu trữ tập tin được export (không phải tập tin, mà chọn thư mục chứa tập tin được export). Lúc này Schema sẽ hiển thị vào bảng ở bên tay trái (studentmanagement), nhấn vào Schema ta sẽ thấy các bảng dữ liệu dược hiển thị trong màn hình bên phải (student). Tick chọn schema trong trong bảng ở bên trái

(2)Mục Default Target Schema: Chọn Schema mà ta vừa tạo ở trên

(3) Chọn Dump Structure and Data

(4) Bấm chọn “Start Import” để bắt đầu Import. Nếu máy tính resolution kém thì chỉnh lại để thấy nút này.

Kết quả import:

Sau khi thấy màn hình trên hiển thị tức là đã import thành công, tuy nhiên ta vẫn chưa thấy Schema được import được hiển thị trong Navigator:

Trong màn hình này ta bấm vào biểu tượng Refresh (biểu tượng có 2 mũi tên chỗ cùng hàng chữ SCHEMAS). Kết quả import sẽ hiển thị ra như dưới đây:

Như vậy tới đây Tui đã hướng dẫn đầy đủ các chức năng liên quan tới quản trị cơ sở dữ liệu trong MySQL Workbench, các bạn cần thao tác nhuần nhuyễn để các bài học sau được hiệu quả hơn.

Bài học sau chúng ta sẽ học lập trình về Python tương tác dữ liệu MySQL Server, học về các lệnh quan trọng, và mô hình hóa hướng đối tượng với các table trong MySQL Server, cũng như thiết kế phần mềm tương tác người dùng kết hợp với cơ sở dữ liệu MySQL Server(khoảng 3 bài học liên quan).

Các bạn chú ý theo dõi

Chúc các bạn thành công!

Bài 46: Cài đặt hệ quản trị Cơ sở dữ liệu MySQL Server

Các bài học trước, chúng ta đã xử lý dữ liệu local như text file, CSV, Json, hay SQLite database. Tuy nhiên đa phần dự án chúng ta sẽ tương tác với các hệ quản trị cơ sở dữ liệu như MySQL Server, Microsoft SQL Server, PostgreSQL…Hay các hệ thống cơ sở dữ liệu online của các hãng.

Trong phạm vi học tập của khóa học này, Tui hướng dẫn các bạn tương tác dữ liệu với MySQL Server, nó là một trong các hệ quản trị cơ sở dữ liệu nổi tiếng, rất phổ biến hiện nay, được sử dụng rất nhiều trong các hệ thống phần mềm quản lý. Và chúng ta sử dụng MySQL Workbench để làm công cụ thao tác với dữ liệu MySQL Server. Chúng ta có khoảng 4 bài học chính liên quan tới Python và MySQL Server:

(1) Cài đặt hệ quản trị cơ sở dữ liệu MySQL Server, công cụ MySQL Workbench

(2) Sử dụng hệ quản trị cơ sở dữ liệu MySQL Server, công cụ MySQL Workbench

(3) Lập trình tương tác Python và MySQL Server: Kết nối cơ sở dữ liệu, thêm mới dữ liệu, truy vấn dữ liệu, cập nhập dữ liệu, xóa dữ liệu, và các thao tác sắp xếp, paging…

(4) Xây dựng các phần mềm tương tác giao diện người dùng sử dụng Python-Pyqt6- Qt Designer, tích hợp các chức năng thống kê và máy học.

Bài học này chúng ta sẽ tiến hành cài đặt và sử dụng MySQL Server, MySQL Workbench (Lưu ý tùy từng thời điểm bạn cài đặt mà version nó khác nhau, nhưng đừng quan trọng version này, đang học tập thì cứ lấy cái mới nhất mà hệ thống hiển thị):

Bước 1: Tải MySQL Server

Vào link : https://dev.mysql.com/downloads/installer/

Chọn version, sau đó ta tải bản cài đặt offline (303.6M) để cài đặt được nhanh chóng hơn

Khi nhấn vào “Download” thì hệ thống thường yêu cầu ta Login hay Sign Up. Trường hợp này ta chọn “No thanks, just start my download”

Sau khi tải về thành công thì ta tiến hành cài đặt

Bước 2: Cài đặt MySQL Server

Màn hình khởi động cho quá trình cài đặt phần mềm sẽ tương tự như dưới đây:

Hình trên cho thấy, có hàng loạt phần mềm sẽ được cài đặt, bao gồm các thư viện lập trình để kết nối tương tác tới MySQL Server.

Ta để mặc định vậy và nhấn “Execute”, chờ phần mềm cài đặt cho hoàn tất:

Tiếp tục chờ cho tới mà hình complete dưới đây:

Sau đó nhấn nút “Next”, màn hình Product Configuration xuất hiện như bên dưới:

Bạn quan sát trạng thái cài đặt MySQL Server là ready, tiêp tục nhấn nút “Next”, màn hình Type and Networking xuất hiện như dưới đây:

Hãy để mặc định như trên và nhấn nút “Next”, port mặc định 3306. Sau khi nhấn Next, màn hình Authentication Method xuất hiện như dưới đây:

Ta chọn “Use Strong Password Encryption for Authentication” rồi nhấn nút Next. Lúc này màn hình Accounts and Roles xuất hiện như dưới đây (tới màn hình này thao tác từ từ kẻo sót thiết lập tài khoản sẽ không đăng nhập được MySQL Server):

Trước tiên cần cài đặt “Root Account Password”:

-Lưu ý với MySQL Server, thì Administrator của hệ thống là account tên root

-Mục MySQL root password và Repeat Password bạn cần nhập giống nhau

Tui giả sử rằng trong chuỗi các bài học hướng dẫn này sẽ dùng mật khẩu cho MySQL root là: @Obama123

Bạn nhập giống như trên, như vậy từ rày về sau khi đăng nhập tài khoản quản trị tối cao của hệ thống thì dùng:

user name: root

password: @Obama123

Sau đó, tạo các tài khoản cho MySQL User Accounts, cũng ở màn hình trên, bạn nhấn vào nút “Add User“, lúc này màn hình MySQL User Account sẽ hiển thị ra như dưới đây:

Ở màn hình này, tùy ý bạn đặt account. Ví dụ tui đặt như sau (bạn cũng thống nhất đặt giống vầy để các bài học sau không phải sử tài khoản kết nối):

User Name: obama

Password và confirm password: @Obama123

Host và Role chọn như giao diện Tui chụp

Sau đó nhấn nút “Ok”, ta có kết quả:

Sau đó nhấn nút “Next”, màn hình Windows Service hiển thị ra như dưới đây:

Chọn cấu hình mặc định như trên, sau đó nhấn nút “Next”, lúc này màn hình Server File Permissions hiển thị ra như dưới đây:

Ta chọn “Yes, grant full access to the user running the Windows Service….” rồi nhấn Next, màn hình Apply Configuration xuất hiện ra như dưới đây:

Ta nhấn nút “Execute” và chờ cho tới khi Apply Configuration hoàn tất:

Ta nhấn Finish để qua màn hình Product Configuration:

Chờ xuất hiện các trạng thái complete và ready thì nhấn nút Next, lúc này màn hình MySQL Router Configuration xuất hiện như sau:

Để mặc định như trên và nhấn nút Finish, lúc này màn hình Product Configuration quay lại như hình dưới đây:

Ta nhấn Next, để qua màn hình Connect To Server:

Màn hình Connect To Server, là màn hình rất quan trọng, nó trả lời cho chúng ta biết đã cài đặt các thông số kết nối thành công hay chưa.

Ở mục trên ta nhập user name và mật khẩu của hệ thống trước đó. Cụ thể:

user name: root

password: @Obama123

Sau đó nhấn nút “Check” để kiểm tra kết nối có thành công hay không, nếu nó ra màn hình như dưới đây là thành công:

Ta nhấn nút Next để tiếp tục, lúc này màn hình Apply Configuration xuất hiện lại như hình đưới đây:

Ta nhấn nút “Execute”, và chờ quá trình này hoàn tất:

Sau đó ta nhấn nút Finish, màn hình Product Configuration tiếp tục quay lại như dưới đây:

Ta nhấn nút Next, Màn hình Installation Complete xuất hiện như dưới đây:

Như vậy tới đây chúng ta đã hoàn tất quá trình cài đặt MySQL Server và MySQL Workbench, màn hình của Workbench như dưới đây, ở bài học sau Tui sẽ hướng dẫn chi tiết cách sử dụng:

khởi động MySQL Workbench ta thấy giao diện: