Trong hướng dẫn trước, chúng ta đã học cách kết nối cơ sở dữ liệu MySQL với Python. Trong hướng dẫn đó, chúng ta sẽ đi qua kết nối DB, truy vấn DDL và DML, v.v. Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách tạo thủ tục lưu sẵn và gọi chúng trong chương trình Python
Đây sẽ là một hướng dẫn chi tiết nhưng đơn giản và chúng ta sẽ tìm hiểu mọi thứ từng bước một, bắt đầu từ việc tạo bảng và các thủ tục trong MySQL. Sau đó, chúng tôi sẽ gọi các thủ tục này trong chương trình Python. chúng ta đi đây
Trong hướng dẫn này, chúng tôi sẽ không giải thích thủ tục lưu sẵn là gì vì coi như bạn đã có kiến thức về thủ tục lưu trữ trong MySQL
điều kiện tiên quyết
Trước khi viết chương trình bằng Python, hãy đảm bảo rằng bạn đã khởi động máy chủ MySQL và nó đang hoạt động tốt. Sau đó, chúng ta phải tạo thủ tục lưu trữ trong MySQL thông qua dòng lệnh. Tuy nhiên, bạn có thể muốn viết các câu lệnh MySQL bằng MySQL workbench
Đảm bảo rằng bạn sử dụng tốt kết nối Python-MySQL. Chúng tôi đã tạo hướng dẫn đầy đủ;
Đó là tất cả những gì chúng ta cần. Hãy đi sâu vào hướng dẫn
Trước khi chúng ta bắt đầu
Trước khi bắt đầu hướng dẫn thực tế, hãy hiểu những điều chúng ta sẽ đạt được
Ta sẽ tạo một bảng để chứa thông tin chi tiết của các laptop. Sau đó, chúng tôi sẽ tạo hai thủ tục được lưu trữ; . Sau đó, chúng tôi sẽ viết một chương trình Python và gọi từng thủ tục được lưu trữ đó
Cú pháp gọi thủ tục lưu trữ MySQL trong Python
Gọi một thủ tục lưu sẵn trong Python cũng dễ như viết một truy vấn đơn giản. Cú pháp đơn giản và không yêu cầu câu lệnh bổ sung hoặc nhiều dòng mã
Đây là cú pháp để gọi thủ tục lưu sẵn trong Python
Code language: SQL [Structured Query Language] [sql]
result_args = cursor.callproc[proc_name, args=[]]
Thí dụ-
Code language: SQL [Structured Query Language] [sql]
cursor.callproc[laptop_by_name,["lenovo"];
Ở đâu,
- con trỏ là một đối tượng Python để thực thi các câu lệnh và giao tiếp với MySQL DB
- callproc là một chức năng để gọi thủ tục được lưu trữ
- proc_name là tên thủ tục được lưu trữ
- args là các đối số thủ tục được lưu trữ
Phiên bản sửa đổi của chuỗi đầu vào được trả về bởi callproc[]. Cách tiếp cận này không thay đổi các tham số được cung cấp. Tuy nhiên, nó có thể thay thế các tham số đầu ra và đầu vào/đầu ra bằng các giá trị mới tùy thuộc vào kết quả thực hiện
Tập hợp kết quả của câu lệnh trên được tự động tìm nạp và lưu trữ dưới dạng phiên bản MySQLCursorBuffered và bạn có thể sử dụng phương thức stored_result[] để lấy giá trị tập hợp kết quả
Ví dụ gọi thủ tục trong Python
Hãy chứng minh điều này bằng cách tạo một bảng, tạo một thủ tục được lưu trữ và sau đó gọi nó trong chương trình Python của chúng ta
Tạo bảng và chèn dữ liệu vào bảng
Hãy bắt đầu bằng cách tạo một bảng có tên là máy tính xách tay và sau đó chèn dữ liệu vào đó
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE laptops[ id INT PRIMARY KEY AUTO_INCREMENT, model_no INT, model_name VARCHAR[100], price FLOAT, insurance FLOAT, quantity INT ];
Code language: SQL [Structured Query Language] [sql]
INSERT INTO laptops[model_no,model_name,price,insurance,quantity] VALUES[12314,"Lenovo Ideapad",41490,180,5], [57823,"Dell Vostro 3000",40990,130,9], [17827,"Asus Vivobook",35000,130,8], [12879,"HP Ryzen 3",39990,120,9], [23098,"Asus Pentium Q",28990,180,4], [18778,"Dell Inspiron 3",45990,130,5];
Hãy kiểm tra xem dữ liệu đã được chèn thành công vào bảng hay chưa
Code language: SQL [Structured Query Language] [sql]
SELECT * FROM laptops;
Tạo thủ tục lưu trữ
Hoàn hảo. Đã chèn dữ liệu thành công. Sử dụng MySQL CLI, hãy tạo một quy trình để tìm nạp tất cả các chi tiết của máy tính xách tay với giá kết hợp [giá + bảo hiểm]
Code language: SQL [Structured Query Language] [sql]
DELIMITER // mysql> CREATE PROCEDURE lap_details[] BEGIN SELECT id, model_no,model_name,price as base_price, [price+insurance] AS total_price, quantity FROM laptops; END //
Chúng tôi đã tạo thủ tục lưu sẵn lap_details[] bao gồm câu lệnh SELECT với việc bổ sung đơn giản hai cột - giá và bảo hiểm và cột mới sẽ được tạo với tên “total_price”
Lưu ý rằng không có tham số nào được xác định cho thủ tục. Nếu bạn cố truyền tham số trong khi gọi nó, bạn sẽ gặp lỗi
Gọi thủ tục lap_details để xem kết quả
Code language: SQL [Structured Query Language] [sql]
CALL lap_details[];
Bây giờ, chúng ta sẽ tạo một thủ tục khác với một tham số IN và một câu lệnh SELECT
Code language: SQL [Structured Query Language] [sql]
CREATE PROCEDURE lap_by_names[IN name VARCHAR[100]] BEGIN SELECT id, model_no,model_name,price as base_price, insurance,[price+insurance] AS total_price, quantity FROM laptops WHERE model_name LIKE CONCAT['%',name,'%']; END //
Quy trình này sẽ tìm kiếm một máy tính xách tay cụ thể theo tên đã nhập và trả về tất cả các kết quả phù hợp
Chúng tôi đã chuyển một tham số "tên" sẽ bao gồm tên máy tính xách tay. Thủ tục sẽ tìm kiếm từ khóa đã cho trong bảng bằng cách sử dụng mệnh đề WHERE và toán tử LIKE và trả về kết quả
Gọi thủ tục lap_by_names và kiểm tra kết quả
________số 8Chúng tôi đã có đầu ra mong muốn bằng thủ tục. Hãy gọi các thủ tục được lưu trữ này bằng chương trình Python
Gọi các thủ tục được lưu trữ từ một chương trình Python
Thực hiện theo các bước dưới đây để gọi các thủ tục được lưu trữ trong chương trình Python
- Tạo kết nối cơ sở dữ liệu bằng trình kết nối mysql và thông tin xác thực phù hợp
- Tạo một đối tượng con trỏ
- Gọi phương thức call_proc[] để gọi thủ tục
- Lặp lại qua obj. stored_results[] và tìm nạp kết quả bằng phương thức fetchall[]
- In kết quả
- Đóng con trỏ và kết nối DB
Hãy tập hợp tất cả các hướng dẫn trong một chương trình duy nhất được viết dưới đây và thực hiện nó
Code language: Python [python]
import mysql.connector as myconn mydb = myconn.connect[ host="localhost", user="", password="", database="journaldev" ] obj = mydb.cursor[] obj.callproc["lap_details"] for result in obj.stored_results[]: details = result.fetchall[] for det in details: print[det] obj.close[] mydb.close[]
Trong chương trình trên, chúng ta đã gán tập kết quả của kết quả. câu lệnh fetchall[] cho biến chi tiết. Ở đây, chi tiết là một danh sách và lưu trữ tất cả các kết quả dưới dạng một tập hợp các phần tử danh sách. Chúng tôi có thể lặp qua nó và nhận các hàng riêng lẻ bằng cách sử dụng vòng lặp FOR
Lưu ý- bạn có thể in trực tiếp “kết quả. câu lệnh fetchall[]” của vòng lặp FOR đầu tiên. Vòng lặp FOR thứ hai được sử dụng để lấy các hàng trong dòng mới. Bạn cũng có thể bỏ qua vòng lặp FOR thứ hai
Dưới đây là kết quả sau khi thực hiện đoạn chương trình trên
Đây là một chương trình khác để gọi thủ tục được lưu trữ thứ hai “lap_by_names”
0Code language: SQL [Structured Query Language] [sql]
cursor.callproc[laptop_by_name,["lenovo"];
Ở đây, chúng tôi đã chuyển đối số thứ hai cho obj. phương thức callproc[], không là gì ngoài tham số thủ tục được lưu trữ. Chúng tôi sẽ vượt qua “Lenovo” và sau đó là “hp” để lấy đầu ra. Thực hiện chương trình trên ta được kết quả như hình bên dưới
Như bạn có thể thấy, chúng tôi đã nhận được kết quả bao gồm model_name “Lenovo” và “hp”
Sự kết luận
Đây là một hướng dẫn đơn giản nhưng mạnh mẽ để tìm hiểu các thủ tục được lưu trữ trong Python sẽ giúp bạn trong suốt hành trình Python của mình. Nếu bạn thấy hướng dẫn này hữu ích, đừng quên chia sẻ nó với bạn bè của bạn và để họ cùng học. Hẹn gặp lại các bạn trong phần hướng dẫn thú vị sau