A simple CRUD application using python and mysql
This post hasn't been updated for 4 years
Chào tất cả mọi người! Vậy là mình đã tiếp tục come back với chuỗi bài học về Python sau 1 khoảng thời gian dài dăng dẳng đây ạ.
Ở bài viết trước thì mình đã giới thiệu với các bạn về module trong python cũng như cách sử dụng nó. Hôm nay, mình sẽ tổng hợp các kiến thức mà chúng ta đã học từ bấy lâu nay để tạo nên một application CRUD(Create - Read - Update - Delete) đơn giản, sử dụng python và cơ sở dữ liệu MySQL .
Và không để các bạn phải chờ lâu nữa, chúng ta hãy cùng bắt đầu thôi nào, let's go!
Application detai
Ứng dụng mà mình chọn để làm demo ở đây là một ứng dụng quản lý sinh viên đơn giản có các chức năng như: xem danh sách sinh viên, thêm mới sinh viên, tìm kiếm sinh viên, cập nhật thông tin sinh viên và xóa sinh viên.
Và để cho các bạn đỡ phải hoang mang khi đọc code của mình thì mình xin giới thiệu sơ qua về những files có trong app của mình nhé:
- constant.py: Đây là file để mình thiết lập cấu hình database của mình bao gồm các thông tin như host, username, password, database.
- database.py: File này sẽ chứa hàm khởi tạo connection cũng như các hàm xử lý các việc create, update, find, ...
- util.py: File này mình sẽ định nghĩa một số hàm tiện ích được sử dụng.
- student.py: Trong này mình sẽ khai báo một class Student để tiện cho việc transform dữ liệu khi xuất ra terminal
- main.py: Và đây là file gì thì mình không cần giới thiệu lại nha.
Cấu trúc thư mục của mình sẽ như thế này:
root
----constant.py
----database.py
----util.py
----student.py
----main.py
Và như đã đề cập, thì chúng ta sẽ sử dụng cơ sở dữ liệu MySQL để quản lý dữ liệu. Vậy làm thế nào để sử dụng MySQL trong python đây, chúng ta hãy cùng đến với phần tiếp theo nào.
How to use MySQL in Python
Cài đặt MySQL Connector
Python cần một MySQL driver để truy cập vào MySQL, do vậy việc đầu tiên chúng ta cần phải làm đó là cài đặt nó. Ở đây mình sử dụng driver "MySQL Connector" và may mắn thay chúng ta chỉ cần 1 câu lệnh terminal để cài đặt nó. Hãy mở terminal lên và gõ lệnh này vào nhé:
python -m pip install mysql-connector
Note: đôi khi các bạn cần phải sử dụng quyền sudo để cài đặt nếu bị báo lỗi permission denied nhé.
Khởi tạo kết nối đến database
Sau khi đã cài đặt driver thành công thì chúng ta chỉ cần import mysql.connector vào file xxx.py và sau đó sử dụng cú pháp sau để khởi tạo kết nối:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
passwd="yourpassword",
database="yourdatabase"
)
cursor = mydb.cursor()
#Khởi tạo đối tượng cursor để thực thi các câu lệnh sql sau này.
OK, vậy là chúng ta đã khởi tạo xong kết nối đến database, giờ thì cùng nhau chiến đấu tiếp nào.
Xây dựng ứng dụng
Đầu tiên các bạn cần tạo một bảng students có các trường sau: id, code, name, class.
Tạo class Student
Tạo class Student để tiện cho việc transform dữ liệu lấy được từ database.
class Student():
def __init__(self, code, name, className):
self.code = code
self.name = name
self.className = className
def getCode(self):
return self.code
def getName(self):
return self.name
def getClassName(self):
return self.className
def getStudentInfor(self):
print('Code: ' + self.code)
print('Name: ' + self.name)
print('Class: ' + self.className)
print('-------------')
Trong class này mình có define một hàm getStudentInfor
để in dữ liệu của mỗi sinh viên có được ra màn hình.
Tạo file util
from student import Student
def transformData(data):
return Student(data[1], data[2], data[3])
def enterData():
return raw_input('Enter data seperated by comma: ').split(',')
def printListStudents(students):
if len(students):
for student in students:
st = transformData(student)
st.getStudentInfor()
else:
print('No data')
File util này mình define các hàm như transformData
để chuyển đổi dữ liệu từ kiểu Tuples sang Student để dễ hiển thị (các bạn phải import class Student vào mới sử dụng được nhé), enterData
dùng để nhập dữ liệu cho việc update hoặc create. Hàm raw_input(...).split(',')
có tác dụng tách chuỗi chúng ta nhập vào thành các giá trị riêng biệt và trả về một List các dữ liệu cần thiết. Cuối cùng printListStudents
để in danh sách các sinh viên hiện có ra màn hình.
Tạo file database
import mysql.connector
import constant
def connectDb():
return mysql.connector.connect(
host=constant.dbInfor["host"],
user=constant.dbInfor["user"],
passwd=constant.dbInfor["passwd"],
database=constant.dbInfor["database"]
)
def getListStudents(cursor):
cursor.execute("SELECT * FROM students")
results = cursor.fetchall()
return results if len(results) else []
def addNewStudent(mydb, cursor, data):
sql = "INSERT INTO students (code, name, class) VALUES (%s, %s, %s)"
cursor.execute(sql, data)
mydb.commit()
print(cursor.rowcount, "student inserted.")
def findStudents(cursor, code):
sql = "SELECT * FROM students WHERE code = %s"
cursor.execute(sql, code)
results = cursor.fetchall()
return results if len(results) else []
def updateStudents(mydb, cursor, data):
sql = "UPDATE students SET name = %s, class = %s WHERE code = %s"
cursor.execute(sql, data)
mydb.commit()
print(cursor.rowcount, "student(s) affected.")
def deleteStudents(mydb, cursor, code):
sql = "DELETE FROM students WHERE code = %s"
cursor.execute(sql, code)
mydb.commit()
print(cursor.rowcount, "student(s) deleted")
Ở đây các bạn cần lưu ý những điểm sau:
- Để thực thi câu lệnh sql thì chúng ta cần sử dụng hàm
execute(sqlStatement)
thông qua đối tượng cursor đã có được từ connection lúc đầu. - Dùng hàm
fetchall()
để lấy ra tất cả những bản ghi có được từ lúc thực thi câu sql cuối cùng. - Hàm
commit()
được sử dụng để yêu cầu cập nhật sự thay đổi của table, nếu chúng ta không sử dụng hàm này thì những thay đổi đã tác động vào table sẽ không được lưu lại. - Có thể sử dụng thuộc tính
rowcount
của đối tượng cursor để xem số bản ghi bị tác động bởi câu lệnh sql.
Chạy ứng dụng
Sau khi đã xong việc, chúng ta tiến hành viết file main.py và chạy nó.
Sau đây là một số kết quả mà mình đã chạy thử:
List:
Search:
Create:
Tổng kết
Như vậy là chúng ta đã cùng nhau tạo nên một ứng dụng CRUD đơn giản kết hợp python và MySQL với một kết quả tương đối thành công.
Mình hy vọng thông qua bài viết này sẽ giúp ích cho các bạn một phần nào về python cũng như cách sử dụng mysql trong python. Hiểu rõ hơn về cách tạo một class hay một module trong python. Và đặc biệt hơn nữa là góp phần củng cố thêm kiến thức về python cho các bạn đã theo dõi loạt bài viết về python của mình. Xin cảm ơn các bạn.
Đây là toàn bộ mã nguồn của ứng dụng này, các bạn có thể clone về tham khảo nếu chưa hiểu nhé: https://github.com/phanvantan73/python_mysql
All Rights Reserved