MySQL là một trong những hệ thống quản lý cơ sở dữ liệu [DBMS] phổ biến nhất trên thị trường hiện nay. Nó chỉ xếp thứ hai sau Oracle DBMS trong Bảng xếp hạng DB-Engines năm nay. Vì hầu hết các ứng dụng phần mềm cần tương tác với dữ liệu ở một dạng nào đó, nên các ngôn ngữ lập trình như Python cung cấp các công cụ để lưu trữ và truy cập các nguồn dữ liệu này
Sử dụng các kỹ thuật được thảo luận trong hướng dẫn này, bạn sẽ có thể tích hợp hiệu quả cơ sở dữ liệu MySQL với ứng dụng Python. Bạn sẽ phát triển một cơ sở dữ liệu MySQL nhỏ cho hệ thống xếp hạng phim và tìm hiểu cách truy vấn nó trực tiếp từ mã Python của bạn
Đến cuối hướng dẫn này, bạn sẽ có thể
- Xác định các tính năng độc đáo của MySQL
- Kết nối ứng dụng của bạn với cơ sở dữ liệu MySQL
- Truy vấn cơ sở dữ liệu để lấy dữ liệu cần thiết
- Xử lý các ngoại lệ xảy ra khi truy cập cơ sở dữ liệu
- Sử dụng các phương pháp hay nhất trong khi xây dựng các ứng dụng cơ sở dữ liệu
Để tận dụng tối đa hướng dẫn này, bạn nên có kiến thức làm việc về các khái niệm Python như vòng lặp
cursor = connection.cursor[]
0, hàm, xử lý ngoại lệ và cài đặt các gói Python bằng cách sử dụng cursor = connection.cursor[]
1. Bạn cũng nên có hiểu biết cơ bản về các hệ thống quản lý cơ sở dữ liệu quan hệ và các truy vấn SQL như cursor = connection.cursor[]
2, cursor = connection.cursor[]
3, cursor = connection.cursor[]
4 và cursor = connection.cursor[]
5Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn
So sánh MySQL với các cơ sở dữ liệu SQL khác
SQL là viết tắt của Structured Query Language và là ngôn ngữ lập trình được sử dụng rộng rãi để quản lý cơ sở dữ liệu quan hệ. Bạn có thể đã nghe nói về các hương vị khác nhau của DBMS dựa trên SQL. Những cái phổ biến nhất bao gồm MySQL, PostgreSQL, SQLite và SQL Server. Tất cả các cơ sở dữ liệu này đều tuân thủ các tiêu chuẩn SQL nhưng với các mức độ tuân thủ khác nhau
Là nguồn mở kể từ khi thành lập vào năm 1995, MySQL nhanh chóng trở thành công ty dẫn đầu thị trường trong số các giải pháp SQL. MySQL cũng là một phần của hệ sinh thái Oracle. Mặc dù chức năng cốt lõi của nó hoàn toàn miễn phí, nhưng cũng có một số tiện ích bổ sung trả phí. Hiện tại, MySQL được sử dụng bởi tất cả các công ty công nghệ lớn, bao gồm Google, LinkedIn, Uber, Netflix, Twitter và các công ty khác
Ngoài một cộng đồng nguồn mở lớn để hỗ trợ, còn có nhiều lý do khác cho sự thành công của MySQL
Dễ cài đặt. MySQL được thiết kế thân thiện với người dùng. Việc thiết lập cơ sở dữ liệu MySQL khá đơn giản và một số công cụ của bên thứ ba có sẵn rộng rãi, như phpMyAdmin, tiếp tục hợp lý hóa quy trình thiết lập. MySQL có sẵn cho tất cả các hệ điều hành chính, bao gồm Windows, macOS, Linux và Solaris
Tốc độ. MySQL nổi tiếng là một giải pháp cơ sở dữ liệu cực kỳ nhanh. Nó có dấu chân tương đối nhỏ hơn và cực kỳ có thể mở rộng trong thời gian dài
Đặc quyền người dùng và bảo mật. MySQL đi kèm với một tập lệnh cho phép bạn đặt mức bảo mật mật khẩu, chỉ định mật khẩu quản trị viên và thêm và xóa đặc quyền tài khoản người dùng. Tập lệnh này đơn giản hóa quy trình quản trị cho cổng quản lý người dùng lưu trữ web. Các DBMS khác, như PostgreSQL, sử dụng các tệp cấu hình phức tạp hơn để sử dụng
Mặc dù MySQL nổi tiếng về tốc độ và tính dễ sử dụng, nhưng bạn có thể nhận được nhiều tính năng nâng cao hơn với PostgreSQL. Ngoài ra, MySQL không hoàn toàn tuân thủ SQL và có một số hạn chế về chức năng, chẳng hạn như không hỗ trợ mệnh đề
cursor = connection.cursor[]
6Bạn cũng có thể gặp phải một số vấn đề với việc đọc và ghi đồng thời trong MySQL. Nếu phần mềm của bạn có nhiều người dùng ghi dữ liệu vào nó cùng một lúc thì PostgreSQL có thể là lựa chọn phù hợp hơn
Ghi chú. Để có sự so sánh sâu hơn về MySQL và PostgreSQL trong bối cảnh thế giới thực, hãy xem Tại sao Uber Engineering lại chuyển từ Postgres sang MySQL
SQL Server cũng là một DBMS rất phổ biến và được biết đến với độ tin cậy, hiệu quả và bảo mật. Nó được ưa thích bởi các công ty, đặc biệt là trong lĩnh vực ngân hàng, những người thường xuyên xử lý khối lượng công việc lưu lượng truy cập lớn. Đó là một giải pháp thương mại và là một trong những hệ thống tương thích nhất với các dịch vụ Windows
Năm 2010, khi Oracle mua lại Sun Microsystems và MySQL, nhiều người đã lo lắng về tương lai của MySQL. Vào thời điểm đó, Oracle là đối thủ cạnh tranh lớn nhất của MySQL. Các nhà phát triển lo ngại rằng đây là một sự tiếp quản thù địch từ Oracle với mục đích phá hủy MySQL
Một số nhà phát triển dẫn đầu bởi Michael Widenius, tác giả ban đầu của MySQL, đã tạo ra một nhánh của cơ sở mã MySQL và đặt nền tảng cho MariaDB. Mục đích là để đảm bảo quyền truy cập vào MySQL và giữ cho nó miễn phí mãi mãi
Đến nay, MariaDB vẫn được cấp phép GPL đầy đủ, giữ nó hoàn toàn thuộc phạm vi công cộng. Mặt khác, một số tính năng của MySQL chỉ khả dụng với giấy phép trả phí. Ngoài ra, MariaDB cung cấp một số tính năng cực kỳ hữu ích mà máy chủ MySQL không hỗ trợ, như SQL phân tán và lưu trữ dạng cột. Bạn có thể tìm thêm sự khác biệt giữa MySQL và MariaDB được liệt kê trên trang web của MariaDB
MySQL sử dụng cú pháp rất giống với SQL chuẩn. Tuy nhiên, có một số khác biệt đáng chú ý được đề cập trong tài liệu chính thức
Loại bỏ các quảng cáoCài đặt Máy chủ MySQL và Trình kết nối MySQL/Python
Bây giờ, để bắt đầu làm việc với hướng dẫn này, bạn cần thiết lập hai thứ. máy chủ MySQL và trình kết nối MySQL. Máy chủ MySQL sẽ cung cấp tất cả các dịch vụ cần thiết để xử lý cơ sở dữ liệu của bạn. Sau khi máy chủ hoạt động, bạn có thể kết nối ứng dụng Python của mình với nó bằng Trình kết nối MySQL/Python
Cài đặt máy chủ MySQL
Tài liệu chính thức nêu chi tiết cách được đề xuất để tải xuống và cài đặt máy chủ MySQL. Bạn sẽ tìm thấy hướng dẫn cho tất cả các hệ điều hành phổ biến, bao gồm Windows, macOS, Solaris, Linux, v.v.
Đối với Windows, cách tốt nhất là tải xuống MySQL Installer và để nó đảm nhận toàn bộ quá trình. Trình quản lý cài đặt cũng giúp bạn định cấu hình cài đặt bảo mật của máy chủ MySQL. Trên trang Tài khoản và Vai trò, bạn cần nhập mật khẩu cho tài khoản gốc [quản trị viên] và cũng có thể tùy ý thêm những người dùng khác với các đặc quyền khác nhau
Mặc dù bạn phải chỉ định thông tin đăng nhập cho tài khoản gốc trong khi thiết lập, nhưng bạn có thể sửa đổi các cài đặt này sau này
Ghi chú. Hãy nhớ tên máy chủ, tên người dùng và mật khẩu vì chúng sẽ được yêu cầu để thiết lập kết nối với máy chủ MySQL sau này
Mặc dù bạn chỉ cần máy chủ MySQL cho hướng dẫn này, nhưng bạn cũng có thể thiết lập các công cụ hữu ích khác như MySQL Workbench bằng các trình cài đặt này. Nếu bạn không muốn cài đặt MySQL trực tiếp trong hệ điều hành của mình, thì triển khai MySQL trên Linux với Docker là một giải pháp thay thế thuận tiện
Cài đặt Trình kết nối MySQL/Python
Trình điều khiển cơ sở dữ liệu là một phần mềm cho phép ứng dụng kết nối và tương tác với hệ thống cơ sở dữ liệu. Các ngôn ngữ lập trình như Python cần một trình điều khiển đặc biệt trước khi chúng có thể nói chuyện với cơ sở dữ liệu từ một nhà cung cấp cụ thể
Các trình điều khiển này thường được lấy dưới dạng mô-đun của bên thứ ba. API cơ sở dữ liệu Python [DB-API] xác định giao diện tiêu chuẩn mà tất cả trình điều khiển cơ sở dữ liệu Python phải tuân thủ. Những chi tiết này được ghi lại trong PEP 249. Tất cả trình điều khiển cơ sở dữ liệu Python, chẳng hạn như sqlite3 cho SQLite, psycopg cho PostgreSQL và MySQL Connector/Python cho MySQL, hãy tuân theo các quy tắc triển khai này
Ghi chú. Tài liệu chính thức của MySQL sử dụng thuật ngữ trình kết nối thay vì trình điều khiển. Về mặt kỹ thuật, các trình kết nối chỉ được liên kết với việc kết nối với cơ sở dữ liệu, không tương tác với nó. Tuy nhiên, thuật ngữ này thường được sử dụng cho toàn bộ mô-đun truy cập cơ sở dữ liệu bao gồm trình kết nối và trình điều khiển.
Để duy trì tính nhất quán với tài liệu, bạn sẽ thấy thuật ngữ trình kết nối bất cứ khi nào MySQL được đề cập
Nhiều ngôn ngữ lập trình phổ biến có API cơ sở dữ liệu riêng. Ví dụ: Java có API Kết nối cơ sở dữ liệu Java [JDBC]. Nếu bạn cần kết nối một ứng dụng Java với cơ sở dữ liệu MySQL, thì bạn cần sử dụng trình kết nối JDBC của MySQL, tuân theo API JDBC
Tương tự, trong Python, bạn cần cài đặt trình kết nối Python MySQL để tương tác với cơ sở dữ liệu MySQL. Nhiều gói tuân theo các tiêu chuẩn DB-API, nhưng phổ biến nhất trong số đó là MySQL Connector/Python. Bạn có thể lấy nó với
cursor = connection.cursor[]
1________số 8
cursor = connection.cursor[]
1 cài đặt trình kết nối dưới dạng mô-đun bên thứ ba trong môi trường ảo hiện đang hoạt động. Bạn nên thiết lập một môi trường ảo biệt lập cho dự án cùng với tất cả các thành phần phụ thuộcĐể kiểm tra xem quá trình cài đặt có thành công hay không, hãy nhập lệnh sau trên thiết bị đầu cuối Python của bạn
>>>
cursor = connection.cursor[]
0Nếu đoạn mã trên thực thi không có lỗi, thì
cursor = connection.cursor[]
9 đã được cài đặt và sẵn sàng sử dụng. Nếu bạn gặp phải bất kỳ lỗi nào, hãy đảm bảo rằng bạn đang ở trong đúng môi trường ảo và bạn đang sử dụng đúng trình thông dịch PythonĐảm bảo rằng bạn đang cài đặt đúng gói
cursor = connection.cursor[]
20, đây là gói triển khai Python thuần túy. Cẩn thận với các trình kết nối có tên tương tự nhưng hiện đã hết giá trị như cursor = connection.cursor[]
21Loại bỏ các quảng cáoThiết lập kết nối với máy chủ MySQL
MySQL là một hệ thống quản lý cơ sở dữ liệu dựa trên máy chủ. Một máy chủ có thể chứa nhiều cơ sở dữ liệu. Để tương tác với cơ sở dữ liệu, trước tiên bạn phải thiết lập kết nối với máy chủ. Quy trình làm việc chung của chương trình Python tương tác với cơ sở dữ liệu dựa trên MySQL như sau
- Kết nối với máy chủ MySQL
- Tạo cơ sở dữ liệu mới
- Kết nối với cơ sở dữ liệu mới được tạo hoặc hiện có
- Thực thi truy vấn SQL và tìm nạp kết quả
- Thông báo cho cơ sở dữ liệu nếu có bất kỳ thay đổi nào đối với bảng
- Đóng kết nối với máy chủ MySQL
Đây là quy trình công việc chung có thể khác nhau tùy thuộc vào từng ứng dụng. Nhưng bất kể ứng dụng có thể là gì, bước đầu tiên là kết nối cơ sở dữ liệu của bạn với ứng dụng của bạn
Thiết lập kết nối
Bước đầu tiên trong việc tương tác với máy chủ MySQL là thiết lập kết nối. Để làm điều này, bạn cần có
cursor = connection.cursor[]
22 từ mô-đun cursor = connection.cursor[]
9. Hàm này nhận các tham số như cursor = connection.cursor[]
24, cursor = connection.cursor[]
25 và cursor = connection.cursor[]
26 và trả về một đối tượng cursor = connection.cursor[]
27. Bạn có thể nhận các thông tin đăng nhập này dưới dạng đầu vào từ người dùng và chuyển chúng tới cursor = connection.cursor[]
22cursor = connection.cursor[]
1Đoạn mã trên sử dụng thông tin đăng nhập đã nhập để thiết lập kết nối với máy chủ MySQL của bạn. Đổi lại, bạn nhận được một đối tượng
cursor = connection.cursor[]
27, được lưu trữ trong biến cursor = connection.cursor[]
30. Từ giờ trở đi, bạn sẽ sử dụng biến này để truy cập máy chủ MySQL của mìnhCó một số điều quan trọng cần chú ý trong đoạn mã trên
Bạn phải luôn xử lý các ngoại lệ có thể phát sinh trong khi thiết lập kết nối với máy chủ MySQL. Đây là lý do tại sao bạn sử dụng khối
31 …cursor = connection.cursor[]
32 để bắt và in bất kỳ trường hợp ngoại lệ nào mà bạn có thể gặp phảicursor = connection.cursor[]
Bạn phải luôn đóng kết nối sau khi truy cập xong cơ sở dữ liệu. Để các kết nối mở không sử dụng có thể dẫn đến một số lỗi không mong muốn và các vấn đề về hiệu suất. Đoạn mã trên tận dụng trình quản lý ngữ cảnh bằng cách sử dụng
33, giúp loại bỏ quá trình dọn dẹp kết nốicursor = connection.cursor[]
Bạn không bao giờ nên mã hóa cứng thông tin đăng nhập của mình, nghĩa là tên người dùng và mật khẩu của bạn, trực tiếp trong tập lệnh Python. Đây là một phương pháp không tốt để triển khai và gây ra mối đe dọa bảo mật nghiêm trọng. Đoạn mã trên nhắc người dùng về thông tin đăng nhập. Nó sử dụng mô-đun
34 tích hợp để ẩn mật khẩu. Mặc dù điều này tốt hơn so với mã hóa cứng, nhưng có nhiều cách khác an toàn hơn để lưu trữ thông tin nhạy cảm, chẳng hạn như sử dụng các biến môi trườngcursor = connection.cursor[]
Bây giờ bạn đã thiết lập kết nối giữa chương trình và máy chủ MySQL của mình, nhưng bạn vẫn cần tạo cơ sở dữ liệu mới hoặc kết nối với cơ sở dữ liệu hiện có bên trong máy chủ
Tạo cơ sở dữ liệu mới
Trong phần trước, bạn đã thiết lập kết nối với máy chủ MySQL của mình. Để tạo một cơ sở dữ liệu mới, bạn cần thực thi một câu lệnh SQL
cursor = connection.cursor[]
8Câu lệnh trên sẽ tạo một cơ sở dữ liệu mới với tên
cursor = connection.cursor[]
35Ghi chú. Trong MySQL, bắt buộc phải đặt dấu chấm phẩy [_______236] ở cuối câu lệnh, dấu chấm phẩy biểu thị sự kết thúc của truy vấn. Tuy nhiên, Trình kết nối MySQL/Python tự động thêm dấu chấm phẩy vào cuối truy vấn của bạn, vì vậy bạn không cần sử dụng nó trong mã Python của mình
Để thực hiện một truy vấn SQL trong Python, bạn sẽ cần sử dụng một con trỏ, con trỏ này sẽ loại bỏ quyền truy cập vào các bản ghi cơ sở dữ liệu. MySQL Connector/Python cung cấp cho bạn lớp
cursor = connection.cursor[]
37, giúp khởi tạo các đối tượng có thể thực thi các truy vấn MySQL trong Python. Một thể hiện của lớp cursor = connection.cursor[]
37 cũng được gọi là một cursor = connection.cursor[]
39Đối tượng
cursor = connection.cursor[]
39 sử dụng đối tượng cursor = connection.cursor[]
27 để tương tác với máy chủ MySQL của bạn. Để tạo một cursor = connection.cursor[]
39, hãy sử dụng phương pháp cursor = connection.cursor[]
73 của biến cursor = connection.cursor[]
30 của bạncursor = connection.cursor[]
Đoạn mã trên cung cấp cho bạn một thể hiện của lớp
cursor = connection.cursor[]
37Một truy vấn cần được thực hiện được gửi tới
cursor = connection.cursor[]
76 ở định dạng chuỗi. Trong trường hợp cụ thể này, bạn sẽ gửi truy vấn cursor = connection.cursor[]
77 tới cursor = connection.cursor[]
76cursor = connection.cursor[]
2Sau khi thực thi đoạn mã trên, bạn sẽ có một cơ sở dữ liệu mới có tên là
cursor = connection.cursor[]
79 trong máy chủ MySQL của mìnhTruy vấn
cursor = connection.cursor[]
77 được lưu trữ dưới dạng một chuỗi trong biến cursor = connection.cursor[]
71 và sau đó được chuyển đến cursor = connection.cursor[]
76 để thực hiện. Mã sử dụng trình quản lý ngữ cảnh với đối tượng cursor = connection.cursor[]
39 để xử lý quy trình dọn dẹpBạn có thể gặp lỗi ở đây nếu cơ sở dữ liệu có cùng tên đã tồn tại trong máy chủ của bạn. Để xác nhận điều này, bạn có thể hiển thị tên của tất cả các cơ sở dữ liệu trong máy chủ của mình. Sử dụng cùng một đối tượng
cursor = connection.cursor[]
27 từ trước đó, thực hiện câu lệnh cursor = connection.cursor[]
75>>>
cursor = connection.cursor[]
3Đoạn mã trên in tên của tất cả các cơ sở dữ liệu hiện có trong máy chủ MySQL của bạn. Lệnh
cursor = connection.cursor[]
75 cũng xuất ra một số cơ sở dữ liệu mà bạn không tạo trong máy chủ của mình, như cursor = connection.cursor[]
77, cursor = connection.cursor[]
78, v.v. Các cơ sở dữ liệu này được tạo tự động bởi máy chủ MySQL và cung cấp quyền truy cập vào nhiều siêu dữ liệu cơ sở dữ liệu và cài đặt máy chủ MySQLBạn đã tạo một cơ sở dữ liệu mới trong phần này bằng cách thực hiện câu lệnh
cursor = connection.cursor[]
77. Trong phần tiếp theo, bạn sẽ thấy cách kết nối với cơ sở dữ liệu đã tồn tạiKết nối với cơ sở dữ liệu hiện có
Trong phần trước, bạn đã tạo một cơ sở dữ liệu mới có tên là
cursor = connection.cursor[]
79. Tuy nhiên, bạn vẫn chưa kết nối với nó. Trong nhiều trường hợp, bạn đã có cơ sở dữ liệu MySQL mà bạn muốn kết nối với ứng dụng Python của mìnhBạn có thể thực hiện việc này bằng cách sử dụng cùng chức năng
cursor = connection.cursor[]
22 mà bạn đã sử dụng trước đó bằng cách gửi tham số bổ sung có tên là cursor = connection.cursor[]
92cursor = connection.cursor[]
7Đoạn mã trên rất giống với tập lệnh kết nối mà bạn đã sử dụng trước đó. Thay đổi duy nhất ở đây là một tham số
cursor = connection.cursor[]
92 bổ sung, trong đó tên cơ sở dữ liệu của bạn được chuyển đến cursor = connection.cursor[]
22. Khi bạn thực thi tập lệnh này, bạn sẽ được kết nối với cơ sở dữ liệu cursor = connection.cursor[]
79Tạo, thay đổi và xóa bảng
Trong phần này, bạn sẽ học cách thực hiện một số truy vấn DDL cơ bản như
cursor = connection.cursor[]
4, cursor = connection.cursor[]
3 và cursor = connection.cursor[]
98 bằng Python. Bạn sẽ xem nhanh cơ sở dữ liệu MySQL mà bạn sẽ sử dụng trong phần còn lại của hướng dẫn này. Bạn cũng sẽ tạo tất cả các bảng cần thiết cho cơ sở dữ liệu và tìm hiểu cách thực hiện các sửa đổi trên các bảng này sau này.Xác định lược đồ cơ sở dữ liệu
Bạn có thể bắt đầu bằng cách tạo lược đồ cơ sở dữ liệu cho hệ thống xếp hạng phim trực tuyến. Cơ sở dữ liệu sẽ bao gồm ba bảng
99 chứa thông tin chung về phim và có các thuộc tính saucursor = connection.cursor[]
000cursor = connection.cursor[]
001cursor = connection.cursor[]
002cursor = connection.cursor[]
003cursor = connection.cursor[]
004cursor = connection.cursor[]
005 chứa thông tin về những người đã đăng đánh giá hoặc xếp hạng và có các thuộc tính saucursor = connection.cursor[]
000cursor = connection.cursor[]
007cursor = connection.cursor[]
008cursor = connection.cursor[]
009 chứa thông tin về xếp hạng đã được đăng và có các thuộc tính saucursor = connection.cursor[]
010 [khóa ngoại]cursor = connection.cursor[]
011 [khóa ngoại]cursor = connection.cursor[]
012cursor = connection.cursor[]
Một hệ thống xếp hạng phim trong thế giới thực, như IMDb, sẽ cần lưu trữ một loạt các thuộc tính khác, như email, danh sách diễn viên phim, v.v. Nếu muốn, bạn có thể thêm nhiều bảng và thuộc tính vào cơ sở dữ liệu này. Nhưng ba bảng này sẽ đủ cho mục đích của hướng dẫn này
Hình ảnh dưới đây mô tả lược đồ cơ sở dữ liệu
Các bảng trong cơ sở dữ liệu này có liên quan với nhau.
cursor = connection.cursor[]
99 và cursor = connection.cursor[]
005 sẽ có mối quan hệ nhiều-nhiều vì một bộ phim có thể được nhiều người đánh giá xem xét và một người đánh giá có thể đánh giá nhiều phim. Bảng cursor = connection.cursor[]
009 kết nối bảng cursor = connection.cursor[]
99 với bảng cursor = connection.cursor[]
005Tạo bảng bằng câu lệnh cursor = connection.cursor[]
018
cursor = connection.cursor[]
Bây giờ, để tạo một bảng mới trong MySQL, bạn cần sử dụng câu lệnh
cursor = connection.cursor[]
018. Truy vấn MySQL sau đây sẽ tạo bảng cursor = connection.cursor[]
99 cho cơ sở dữ liệu cursor = connection.cursor[]
79 của bạncursor = connection.cursor[]
7Nếu bạn đã xem các câu lệnh SQL trước đây, thì hầu hết các truy vấn trên có thể có ý nghĩa. Nhưng có một số khác biệt trong cú pháp MySQL mà bạn nên biết
Ví dụ: MySQL có nhiều loại dữ liệu khác nhau để bạn xem xét, bao gồm
cursor = connection.cursor[]
022, cursor = connection.cursor[]
023, cursor = connection.cursor[]
024, v.v. Ngoài ra, MySQL sử dụng từ khóa cursor = connection.cursor[]
025 khi giá trị cột phải được tăng tự động khi chèn bản ghi mớiĐể tạo một bảng mới, bạn cần chuyển truy vấn này tới
cursor = connection.cursor[]
76, chấp nhận truy vấn MySQL và thực hiện truy vấn trên cơ sở dữ liệu MySQL được kết nốicursor = connection.cursor[]
9Bây giờ bạn có bảng
cursor = connection.cursor[]
99 trong cơ sở dữ liệu của mình. Bạn chuyển cursor = connection.cursor[]
028 đến cursor = connection.cursor[]
76, thực hiện yêu cầu thực thiGhi chú. Biến
cursor = connection.cursor[]
30 đề cập đến đối tượng cursor = connection.cursor[]
27 được trả về khi bạn kết nối với cơ sở dữ liệu của mìnhNgoài ra, hãy chú ý câu lệnh
cursor = connection.cursor[]
032 ở cuối mã. Theo mặc định, trình kết nối MySQL của bạn không tự động thực hiện các giao dịch. Trong MySQL, các sửa đổi được đề cập trong giao dịch chỉ xảy ra khi cuối cùng bạn sử dụng lệnh cursor = connection.cursor[]
033. Luôn gọi phương thức này sau mỗi giao dịch để thực hiện các thay đổi trong bảng thực tếNhư bạn đã làm với bảng
cursor = connection.cursor[]
99, hãy thực thi đoạn script sau để tạo bảng cursor = connection.cursor[]
005cursor = connection.cursor[]
00Nếu được yêu cầu, bạn có thể thêm thông tin khác về người đánh giá, chẳng hạn như ID email hoặc thông tin nhân khẩu học của họ. Nhưng
cursor = connection.cursor[]
007 và cursor = connection.cursor[]
008 sẽ phục vụ mục đích của bạn lúc nàyCuối cùng, bạn có thể tạo bảng
cursor = connection.cursor[]
009 bằng tập lệnh saucursor = connection.cursor[]
01Việc triển khai các mối quan hệ khóa ngoại trong MySQL hơi khác và bị hạn chế so với SQL tiêu chuẩn. Trong MySQL, cả cha và con trong ràng buộc khóa ngoài phải sử dụng cùng một công cụ lưu trữ
Công cụ lưu trữ là thành phần phần mềm cơ bản mà hệ thống quản lý cơ sở dữ liệu sử dụng để thực hiện các thao tác SQL. Trong MySQL, các công cụ lưu trữ có hai loại khác nhau
Công cụ lưu trữ giao dịch là giao dịch an toàn và cho phép bạn khôi phục giao dịch bằng các lệnh đơn giản như
039. Nhiều công cụ MySQL phổ biến, bao gồm InnoDB và NDB, thuộc danh mục nàycursor = connection.cursor[]
Các công cụ lưu trữ phi giao dịch phụ thuộc vào mã thủ công phức tạp để hoàn tác các câu lệnh đã cam kết trên cơ sở dữ liệu. MyISAM, MEMORY và nhiều công cụ MySQL khác không có giao dịch
InnoDB là công cụ lưu trữ mặc định và phổ biến nhất. Nó giúp duy trì tính toàn vẹn của dữ liệu bằng cách hỗ trợ các ràng buộc khóa ngoài. Điều này có nghĩa là mọi thao tác CRUD trên khóa ngoại đều được kiểm tra để đảm bảo rằng nó không dẫn đến sự không nhất quán giữa các bảng khác nhau
Ngoài ra, lưu ý rằng bảng
cursor = connection.cursor[]
009 sử dụng các cột cursor = connection.cursor[]
010 và cursor = connection.cursor[]
011, cả hai khóa ngoại, cùng làm khóa chính. Bước này đảm bảo rằng người đánh giá không thể xếp hạng hai lần cho cùng một bộ phimBạn có thể chọn sử dụng lại cùng một con trỏ cho nhiều lần thực hiện. Trong trường hợp đó, tất cả các lần thực thi sẽ trở thành một giao dịch nguyên tử thay vì nhiều giao dịch riêng biệt. Ví dụ: bạn có thể thực hiện tất cả các câu lệnh
cursor = connection.cursor[]
018 bằng một con trỏ và sau đó thực hiện giao dịch của mình chỉ một lầncursor = connection.cursor[]
02Đoạn mã trên trước tiên sẽ thực thi cả ba câu lệnh
cursor = connection.cursor[]
4. Sau đó, nó sẽ gửi một lệnh cursor = connection.cursor[]
033 đến máy chủ MySQL thực hiện giao dịch của bạn. Bạn cũng có thể sử dụng cursor = connection.cursor[]
046 để gửi lệnh cursor = connection.cursor[]
047 đến máy chủ MySQL và xóa tất cả các thay đổi dữ liệu khỏi giao dịchLoại bỏ các quảng cáoHiển thị lược đồ bảng bằng cách sử dụng câu lệnh cursor = connection.cursor[]
048
cursor = connection.cursor[]
Bây giờ, bạn đã tạo cả ba bảng, bạn có thể xem lược đồ của chúng bằng cách sử dụng câu lệnh SQL sau
cursor = connection.cursor[]
03Để lấy lại một số kết quả từ đối tượng
cursor = connection.cursor[]
39, bạn cần sử dụng cursor = connection.cursor[]
050. Phương thức này tìm nạp tất cả các hàng từ câu lệnh được thực thi cuối cùng. Giả sử bạn đã có đối tượng cursor = connection.cursor[]
27 trong biến cursor = connection.cursor[]
30, bạn có thể in ra tất cả các kết quả được tìm nạp bởi cursor = connection.cursor[]
050>>>
cursor = connection.cursor[]
04Khi bạn thực thi đoạn mã trên, bạn sẽ nhận được một bảng chứa thông tin về tất cả các cột trong bảng
cursor = connection.cursor[]
99. Đối với mỗi cột, bạn sẽ nhận được thông tin chi tiết như loại dữ liệu của cột, liệu cột đó có phải là khóa chính hay không, v.v.Sửa đổi lược đồ bảng bằng cách sử dụng câu lệnh cursor = connection.cursor[]
98
cursor = connection.cursor[]
Trong bảng
cursor = connection.cursor[]
99, bạn có một cột tên là cursor = connection.cursor[]
004, chứa doanh thu phòng vé của một bộ phim tính bằng triệu đô la. Bạn có thể viết câu lệnh MySQL sau để sửa đổi kiểu dữ liệu của thuộc tính cursor = connection.cursor[]
004 từ cursor = connection.cursor[]
023 thành cursor = connection.cursor[]
060cursor = connection.cursor[]
05cursor = connection.cursor[]
061 có nghĩa là một số thập phân có thể có tối đa cursor = connection.cursor[]
062 chữ số, trong đó cursor = connection.cursor[]
063 là số thập phân, chẳng hạn như ________ 1064, ________ 1065, ______ 1066, v.v. Sau khi thực hiện câu lệnh cursor = connection.cursor[]
067, bạn có thể hiển thị lược đồ bảng được cập nhật bằng cách sử dụng cursor = connection.cursor[]
048>>>
cursor = connection.cursor[]
06Như được hiển thị trong đầu ra, thuộc tính
cursor = connection.cursor[]
004 hiện thuộc loại cursor = connection.cursor[]
061. Cũng lưu ý rằng trong đoạn mã trên, bạn gọi cursor = connection.cursor[]
76 hai lần. Nhưng cursor = connection.cursor[]
050 chỉ tìm nạp các hàng từ truy vấn được thực hiện cuối cùng, đó là truy vấn cursor = connection.cursor[]
073Xóa bảng bằng câu lệnh cursor = connection.cursor[]
3
cursor = connection.cursor[]
Để xóa một bảng, bạn cần thực thi câu lệnh
cursor = connection.cursor[]
075 trong MySQL. Xóa một bảng là một quá trình không thể đảo ngược. Nếu bạn thực thi mã bên dưới, thì bạn sẽ cần gọi lại truy vấn cursor = connection.cursor[]
018 để sử dụng bảng cursor = connection.cursor[]
009 trong các phần sắp tớiĐể xóa bảng
cursor = connection.cursor[]
009, hãy gửi cursor = connection.cursor[]
079 đến cursor = connection.cursor[]
76cursor = connection.cursor[]
07Nếu bạn thực thi đoạn mã trên, bạn sẽ xóa thành công bảng
cursor = connection.cursor[]
009Chèn bản ghi vào bảng
Trong phần trước, bạn đã tạo ba bảng trong cơ sở dữ liệu của mình.
cursor = connection.cursor[]
99, cursor = connection.cursor[]
005 và cursor = connection.cursor[]
009. Bây giờ bạn cần điền dữ liệu vào các bảng này. Phần này sẽ đề cập đến hai cách khác nhau để chèn bản ghi trong Trình kết nối MySQL cho PythonPhương pháp đầu tiên,
cursor = connection.cursor[]
085, hoạt động tốt khi số lượng bản ghi ít và bản ghi có thể được mã hóa cứng. Phương pháp thứ hai, cursor = connection.cursor[]
086, phổ biến hơn và phù hợp hơn với các tình huống trong thế giới thựcLoại bỏ các quảng cáoSử dụng cursor = connection.cursor[]
085
cursor = connection.cursor[]
Cách tiếp cận đầu tiên sử dụng cùng một phương pháp
cursor = connection.cursor[]
76 mà bạn đã sử dụng cho đến bây giờ. Bạn viết truy vấn cursor = connection.cursor[]
089 trong một chuỗi và chuyển nó tới cursor = connection.cursor[]
76. Bạn có thể sử dụng phương pháp này để chèn dữ liệu vào bảng cursor = connection.cursor[]
99Để tham khảo, bảng
cursor = connection.cursor[]
99 có năm thuộc tính
000cursor = connection.cursor[]
001cursor = connection.cursor[]
002cursor = connection.cursor[]
003cursor = connection.cursor[]
004cursor = connection.cursor[]
Bạn không cần thêm dữ liệu cho
cursor = connection.cursor[]
000 vì cursor = connection.cursor[]
025 sẽ tự động tính toán cursor = connection.cursor[]
000 cho bạn. Đoạn script sau chèn các bản ghi vào bảng cursor = connection.cursor[]
99cursor = connection.cursor[]
08Bảng
cursor = connection.cursor[]
99 hiện được tải với ba mươi bản ghi. Mã gọi cursor = connection.cursor[]
032 ở cuối. Điều quan trọng là phải gọi cursor = connection.cursor[]
104 sau khi thực hiện bất kỳ sửa đổi nào đối với bảngSử dụng cursor = connection.cursor[]
086
cursor = connection.cursor[]
Cách tiếp cận trước phù hợp hơn khi số lượng bản ghi khá nhỏ và bạn có thể viết những bản ghi này trực tiếp vào mã. Nhưng điều này hiếm khi đúng. Bạn sẽ thường lưu trữ dữ liệu này trong một số tệp khác hoặc dữ liệu sẽ được tạo bởi một tập lệnh khác và sẽ cần được thêm vào cơ sở dữ liệu MySQL
Đây là nơi mà
cursor = connection.cursor[]
086 có ích. Nó chấp nhận hai tham số- Một truy vấn có chứa chỗ dành sẵn cho các bản ghi cần được chèn
- Một danh sách chứa tất cả các bản ghi mà bạn muốn chèn
Ví dụ sau chèn các bản ghi cho bảng
cursor = connection.cursor[]
005cursor = connection.cursor[]
09Trong đoạn mã trên, bạn chuyển cả truy vấn và danh sách bản ghi làm đối số cho
cursor = connection.cursor[]
086. Những bản ghi này có thể đã được lấy từ một tệp hoặc từ người dùng và được lưu trữ trong danh sách cursor = connection.cursor[]
109Mã này sử dụng
cursor = connection.cursor[]
110 làm trình giữ chỗ cho hai chuỗi phải được chèn vào cursor = connection.cursor[]
111. Trình giữ chỗ đóng vai trò là trình xác định định dạng và giúp dành chỗ cho một biến bên trong chuỗi. Biến đã chỉ định sau đó được thêm vào vị trí này trong khi thực thiTương tự, bạn có thể sử dụng
cursor = connection.cursor[]
086 để chèn bản ghi vào bảng cursor = connection.cursor[]
009cursor = connection.cursor[]
10Tất cả ba bảng hiện đã được điền dữ liệu. Bây giờ bạn có một cơ sở dữ liệu đánh giá phim trực tuyến đầy đủ chức năng. Bước tiếp theo là hiểu cách tương tác với cơ sở dữ liệu này
Đọc bản ghi từ cơ sở dữ liệu
Cho đến bây giờ, bạn đã xây dựng cơ sở dữ liệu của mình. Bây giờ là lúc thực hiện một số truy vấn trên đó và tìm một số thuộc tính thú vị từ tập dữ liệu này. Trong phần này, bạn sẽ học cách đọc các bản ghi từ các bảng cơ sở dữ liệu bằng cách sử dụng câu lệnh
cursor = connection.cursor[]
2Loại bỏ các quảng cáoĐọc bản ghi bằng cách sử dụng câu lệnh cursor = connection.cursor[]
2
cursor = connection.cursor[]
Để truy xuất bản ghi, bạn cần gửi truy vấn
cursor = connection.cursor[]
2 tới cursor = connection.cursor[]
76. Sau đó, bạn sử dụng cursor = connection.cursor[]
050 để trích xuất bảng đã truy xuất dưới dạng danh sách các hàng hoặc bản ghiHãy thử viết một truy vấn MySQL để chọn tất cả các bản ghi từ bảng
cursor = connection.cursor[]
99 và gửi tới cursor = connection.cursor[]
085>>>
cursor = connection.cursor[]
11Biến
cursor = connection.cursor[]
121 giữ các bản ghi được trả về từ việc sử dụng cursor = connection.cursor[]
122. Đó là danh sách các bộ đại diện cho các bản ghi riêng lẻ từ bảngTrong truy vấn trên, bạn sử dụng mệnh đề
cursor = connection.cursor[]
123 để hạn chế số hàng nhận được từ câu lệnh cursor = connection.cursor[]
2. Các nhà phát triển thường sử dụng cursor = connection.cursor[]
123 để thực hiện phân trang khi xử lý khối lượng dữ liệu lớnTrong MySQL, mệnh đề
cursor = connection.cursor[]
123 nhận một hoặc hai đối số số không âm. Khi sử dụng một đối số, bạn chỉ định số hàng tối đa sẽ trả về. Vì truy vấn của bạn bao gồm cursor = connection.cursor[]
127 nên chỉ các bản ghi cursor = connection.cursor[]
128 đầu tiên được tìm nạp. Khi sử dụng cả hai đối số, bạn cũng có thể chỉ định phần bù của hàng đầu tiên để trả vềcursor = connection.cursor[]
12Đối số đầu tiên chỉ định độ lệch của
cursor = connection.cursor[]
129 và đối số thứ hai hạn chế số lượng hàng được trả về thành cursor = connection.cursor[]
128. Truy vấn trên sẽ trả về các hàng từ 3 đến 7Bạn cũng có thể truy vấn các cột đã chọn
>>>
cursor = connection.cursor[]
13Bây giờ, mã chỉ xuất giá trị từ hai cột được chỉ định.
cursor = connection.cursor[]
001 và cursor = connection.cursor[]
002Lọc kết quả bằng mệnh đề cursor = connection.cursor[]
133
cursor = connection.cursor[]
Bạn có thể lọc các bản ghi bảng theo các tiêu chí cụ thể bằng cách sử dụng mệnh đề
cursor = connection.cursor[]
133. Ví dụ: để truy xuất tất cả các phim có doanh thu phòng vé lớn hơn 300 triệu đô la, bạn có thể chạy truy vấn saucursor = connection.cursor[]
14Bạn cũng có thể sử dụng mệnh đề
cursor = connection.cursor[]
135 trong truy vấn cuối cùng để sắp xếp kết quả từ người có thu nhập cao nhất đến người có thu nhập thấp nhất>>>
cursor = connection.cursor[]
15MySQL cung cấp rất nhiều thao tác định dạng chuỗi như
cursor = connection.cursor[]
136 để nối chuỗi. Thông thường, các trang web sẽ hiển thị tiêu đề phim cùng với năm phát hành để tránh nhầm lẫn. Để truy xuất tiêu đề của năm bộ phim có doanh thu cao nhất, nối với năm phát hành của chúng, bạn có thể viết truy vấn sau>>>
cursor = connection.cursor[]
16Nếu bạn không muốn sử dụng mệnh đề
cursor = connection.cursor[]
123 và bạn không cần tìm nạp tất cả các bản ghi, thì đối tượng cursor = connection.cursor[]
39 cũng có các phương thức cursor = connection.cursor[]
139 và cursor = connection.cursor[]
140
139 truy xuất hàng tiếp theo của kết quả, dưới dạng một bộ hoặccursor = connection.cursor[]
142 nếu không còn hàng nào nữacursor = connection.cursor[]
140 truy xuất tập hợp các hàng tiếp theo từ kết quả dưới dạng danh sách các bộ dữ liệu. Nó có đối sốcursor = connection.cursor[]
144, mặc định làcursor = connection.cursor[]
063, mà bạn có thể sử dụng để chỉ định số lượng hàng bạn cần tìm nạp. Nếu không còn hàng nào nữa thì phương thức trả về một danh sách trốngcursor = connection.cursor[]
Hãy thử truy xuất lại tiêu đề của năm bộ phim có doanh thu cao nhất nối với năm phát hành của chúng, nhưng lần này hãy sử dụng
cursor = connection.cursor[]
140>>>
cursor = connection.cursor[]
17Đầu ra với
cursor = connection.cursor[]
140 tương tự như những gì bạn nhận được khi bạn sử dụng mệnh đề cursor = connection.cursor[]
123. Bạn có thể đã nhận thấy cuộc gọi bổ sung cursor = connection.cursor[]
050 ở cuối. Bạn làm điều này để xóa tất cả các kết quả còn lại mà cursor = connection.cursor[]
140 chưa đọcCần phải xóa tất cả các kết quả chưa đọc trước khi thực hiện bất kỳ câu lệnh nào khác trên cùng một kết nối. Nếu không, một ngoại lệ
cursor = connection.cursor[]
151 sẽ được đưa raLoại bỏ các quảng cáoXử lý nhiều bảng bằng câu lệnh cursor = connection.cursor[]
5
cursor = connection.cursor[]
Nếu bạn thấy các truy vấn trong phần trước khá đơn giản, đừng lo lắng. Bạn có thể thực hiện các truy vấn
cursor = connection.cursor[]
2 của mình phức tạp như bạn muốn bằng cách sử dụng các phương pháp tương tự từ phần trướcHãy xem xét một số truy vấn
cursor = connection.cursor[]
5 phức tạp hơn một chút. Nếu bạn muốn tìm tên của năm bộ phim được xếp hạng cao nhất trong cơ sở dữ liệu của mình, thì bạn có thể chạy truy vấn sau>>>
cursor = connection.cursor[]
18Như đã trình bày ở trên, Night of the Living Dead và The Godfather được xếp hạng cao nhất trong cơ sở dữ liệu
cursor = connection.cursor[]
79 của bạnĐể tìm tên của người đánh giá đã xếp hạng nhiều nhất, hãy viết truy vấn sau
>>>
cursor = connection.cursor[]
19cursor = connection.cursor[]
156 là người đánh giá thường xuyên nhất trong cơ sở dữ liệu này. Như đã thấy ở trên, truy vấn phức tạp đến mức nào không quan trọng bởi vì nó cuối cùng được xử lý bởi máy chủ MySQL. Quá trình thực hiện truy vấn của bạn sẽ luôn giữ nguyên. chuyển truy vấn tới cursor = connection.cursor[]
76 và lấy kết quả bằng cách sử dụng cursor = connection.cursor[]
122Cập nhật và xóa bản ghi khỏi cơ sở dữ liệu
Trong phần này, bạn sẽ cập nhật và xóa các bản ghi khỏi cơ sở dữ liệu. Cả hai thao tác này đều có thể được thực hiện trên một bản ghi hoặc nhiều bản ghi trong bảng. Bạn sẽ chọn các hàng cần sửa đổi bằng cách sử dụng mệnh đề
cursor = connection.cursor[]
133Lệnh cursor = connection.cursor[]
160
cursor = connection.cursor[]
Một trong những người đánh giá trong cơ sở dữ liệu của bạn,
cursor = connection.cursor[]
161, hiện đã kết hôn với cursor = connection.cursor[]
162. Họ của cô ấy hiện đã đổi thành cursor = connection.cursor[]
163, vì vậy bạn cần cập nhật cơ sở dữ liệu của mình cho phù hợp. Để cập nhật bản ghi, MySQL sử dụng câu lệnh cursor = connection.cursor[]
160cursor = connection.cursor[]
80Mã chuyển truy vấn cập nhật tới
cursor = connection.cursor[]
76 và cursor = connection.cursor[]
104 mang các thay đổi cần thiết vào bảng cursor = connection.cursor[]
005Ghi chú. Trong truy vấn
cursor = connection.cursor[]
160, mệnh đề cursor = connection.cursor[]
133 giúp chỉ định các bản ghi cần được cập nhật. Nếu bạn không sử dụng cursor = connection.cursor[]
133 thì tất cả các bản ghi sẽ được cập nhậtGiả sử bạn cần cung cấp tùy chọn cho phép người đánh giá sửa đổi xếp hạng. Người đánh giá sẽ cung cấp ba giá trị,
cursor = connection.cursor[]
010, cursor = connection.cursor[]
011 và cursor = connection.cursor[]
012 mới. Mã sẽ hiển thị bản ghi sau khi thực hiện sửa đổi được chỉ địnhGiả sử rằng
cursor = connection.cursor[]
174, cursor = connection.cursor[]
175 và cursor = connection.cursor[]
176 mới, bạn có thể sử dụng các truy vấn MySQL sau để thực hiện sửa đổi cần thiếtcursor = connection.cursor[]
81Các truy vấn trên đầu tiên cập nhật xếp hạng và sau đó hiển thị nó. Bạn có thể tạo một tập lệnh Python hoàn chỉnh để thiết lập kết nối với cơ sở dữ liệu và cho phép người đánh giá sửa đổi xếp hạng
cursor = connection.cursor[]
82Lưu mã này vào tệp có tên
cursor = connection.cursor[]
177. Đoạn mã trên sử dụng trình giữ chỗ cursor = connection.cursor[]
110 để chèn đầu vào nhận được vào chuỗi cursor = connection.cursor[]
179. Lần đầu tiên trong hướng dẫn này, bạn có nhiều truy vấn bên trong một chuỗi. Để chuyển nhiều truy vấn tới một cursor = connection.cursor[]
76, bạn cần đặt đối số cursor = connection.cursor[]
181 của phương thức thành cursor = connection.cursor[]
182Nếu
cursor = connection.cursor[]
181 là cursor = connection.cursor[]
182, thì cursor = connection.cursor[]
76 trả về một trình vòng lặp. Mỗi mục trong trình vòng lặp tương ứng với một đối tượng cursor = connection.cursor[]
39 thực thi một câu lệnh được truyền trong truy vấn. Đoạn mã trên chạy một vòng lặp cursor = connection.cursor[]
0 trên iterator này và sau đó gọi cursor = connection.cursor[]
122 trên mỗi đối tượng cursor = connection.cursor[]
39Ghi chú. Chạy
cursor = connection.cursor[]
122 trên tất cả các đối tượng con trỏ là quan trọng. Để thực hiện một câu lệnh mới trên cùng một kết nối, bạn phải đảm bảo rằng không có kết quả chưa đọc từ các lần thực hiện trước đó. Nếu có kết quả chưa đọc, thì bạn sẽ nhận được một ngoại lệNếu không có tập kết quả nào được tìm nạp trong một thao tác, thì
cursor = connection.cursor[]
122 sẽ đưa ra một ngoại lệ. Để tránh lỗi này, trong đoạn mã trên, bạn sử dụng thuộc tính cursor = connection.cursor[]
192, thuộc tính này cho biết liệu thao tác được thực hiện gần đây nhất có tạo ra các hàng hay khôngMặc dù mã này sẽ giải quyết được mục đích của bạn, nhưng mệnh đề
cursor = connection.cursor[]
133 là mục tiêu chính của tin tặc web ở trạng thái hiện tại. Nó dễ bị tổn thương trước cái được gọi là tấn công SQL injection, có thể cho phép các tác nhân độc hại làm hỏng hoặc lạm dụng cơ sở dữ liệu của bạnCảnh báo. Đừng thử các đầu vào bên dưới trên cơ sở dữ liệu của bạn. Họ sẽ làm hỏng bảng của bạn và bạn sẽ cần phải tạo lại nó
Ví dụ: nếu người dùng gửi
cursor = connection.cursor[]
194, cursor = connection.cursor[]
195 và cursor = connection.cursor[]
196 mới làm đầu vào, thì đầu ra sẽ như thế nàycursor = connection.cursor[]
83cursor = connection.cursor[]
012 với cursor = connection.cursor[]
194 và cursor = connection.cursor[]
195 đã được đổi thành cursor = connection.cursor[]
800. Nhưng nếu bạn là hacker, thì bạn có thể gửi một lệnh ẩn trong đầu vào của mìnhcursor = connection.cursor[]
84Một lần nữa, đầu ra cho thấy rằng
cursor = connection.cursor[]
012 được chỉ định đã được thay đổi thành cursor = connection.cursor[]
800. Điều gì đã thay đổi?Tin tặc đã lẻn truy vấn cập nhật khi đang truy cập vào
cursor = connection.cursor[]
011. Truy vấn cập nhật, cursor = connection.cursor[]
804, thay đổi cursor = connection.cursor[]
008 của tất cả các bản ghi trong bảng cursor = connection.cursor[]
005 thành cursor = connection.cursor[]
807. Bạn có thể thấy sự thay đổi này nếu in bảng cursor = connection.cursor[]
005 ra>>>
cursor = connection.cursor[]
85Đoạn mã trên hiển thị
cursor = connection.cursor[]
007 và cursor = connection.cursor[]
008 cho tất cả các bản ghi trong bảng cursor = connection.cursor[]
005. Cuộc tấn công SQL injection đã làm hỏng bảng này bằng cách thay đổi cursor = connection.cursor[]
008 của tất cả các bản ghi thành cursor = connection.cursor[]
807Có một cách khắc phục nhanh để ngăn chặn các cuộc tấn công như vậy. Không thêm trực tiếp các giá trị truy vấn do người dùng cung cấp vào chuỗi truy vấn của bạn. Thay vào đó, hãy cập nhật tập lệnh
cursor = connection.cursor[]
177 để gửi các giá trị truy vấn này dưới dạng đối số tới cursor = connection.cursor[]
085cursor = connection.cursor[]
86Lưu ý rằng các trình giữ chỗ
cursor = connection.cursor[]
110 không còn trong dấu ngoặc kép. Các chuỗi được chuyển đến trình giữ chỗ có thể chứa một số ký tự đặc biệt. Nếu cần, chúng có thể được thoát chính xác bởi thư viện bên dướicursor = connection.cursor[]
76 đảm bảo rằng các giá trị trong bộ nhận được dưới dạng đối số thuộc loại dữ liệu bắt buộc. Nếu người dùng cố gắng nhập một số ký tự có vấn đề, thì mã sẽ đưa ra một ngoại lệcursor = connection.cursor[]
87cursor = connection.cursor[]
76 sẽ đưa ra một ngoại lệ nếu nó tìm thấy bất kỳ ký tự không mong muốn nào trong đầu vào của người dùng. Bạn nên sử dụng phương pháp này bất cứ khi nào bạn kết hợp đầu vào của người dùng trong một truy vấn. Có nhiều cách khác để ngăn chặn các cuộc tấn công SQL injectionLoại bỏ các quảng cáoLệnh cursor = connection.cursor[]
819
cursor = connection.cursor[]
Xóa hồ sơ hoạt động rất giống với cập nhật hồ sơ. Bạn sử dụng câu lệnh
cursor = connection.cursor[]
819 để xóa các bản ghi đã chọnGhi chú. Xóa là một quá trình không thể đảo ngược. Nếu bạn không sử dụng mệnh đề
cursor = connection.cursor[]
133 thì tất cả các bản ghi từ bảng đã chỉ định sẽ bị xóa. Bạn sẽ cần chạy lại truy vấn cursor = connection.cursor[]
089 để lấy lại các bản ghi đã xóaTrước tiên, bạn nên chạy truy vấn
cursor = connection.cursor[]
2 với cùng một bộ lọc để đảm bảo rằng bạn đang xóa đúng bản ghi. Ví dụ: để xóa tất cả các xếp hạng do cursor = connection.cursor[]
824 đưa ra, trước tiên bạn nên chạy truy vấn cursor = connection.cursor[]
2 tương ứng>>>
cursor = connection.cursor[]
88Đoạn mã trên xuất ra
cursor = connection.cursor[]
011 và cursor = connection.cursor[]
010 cho các bản ghi trong bảng cursor = connection.cursor[]
009 trong đó cursor = connection.cursor[]
824. Khi bạn đã xác nhận rằng đây là những bản ghi mà bạn cần xóa, bạn có thể chạy truy vấn cursor = connection.cursor[]
819 với cùng một bộ lọccursor = connection.cursor[]
89Với truy vấn này, bạn xóa tất cả xếp hạng do người đánh giá đưa ra với
cursor = connection.cursor[]
824 khỏi bảng cursor = connection.cursor[]
009Các cách khác để kết nối Python và MySQL
Trong hướng dẫn này, bạn đã thấy MySQL Connector/Python, đây là phương tiện được đề xuất chính thức để tương tác với cơ sở dữ liệu MySQL từ ứng dụng Python. Có hai trình kết nối phổ biến khác
mysqlclient là một thư viện cạnh tranh trực tiếp với trình kết nối chính thức và được cập nhật tích cực với các tính năng mới. Bởi vì lõi của nó được viết bằng C, nên nó có hiệu suất tốt hơn trình kết nối chính thức thuần Python. Một nhược điểm lớn là khá khó thiết lập và cài đặt, đặc biệt là trên Windows
MySQLdb là một phần mềm cũ vẫn được sử dụng trong các ứng dụng thương mại. Nó được viết bằng C và nhanh hơn MySQL Connector/Python nhưng chỉ có sẵn cho Python 2
Các trình kết nối này đóng vai trò là giao diện giữa chương trình của bạn và cơ sở dữ liệu MySQL và bạn gửi các truy vấn SQL của mình thông qua chúng. Nhưng nhiều nhà phát triển thích sử dụng mô hình hướng đối tượng hơn là truy vấn SQL để thao tác dữ liệu
Ánh xạ quan hệ đối tượng [ORM] là một kỹ thuật cho phép bạn truy vấn và thao tác dữ liệu từ cơ sở dữ liệu trực tiếp bằng ngôn ngữ hướng đối tượng. Thư viện ORM đóng gói mã cần thiết để thao tác dữ liệu, giúp loại bỏ nhu cầu sử dụng dù chỉ một chút SQL. Dưới đây là các ORM Python phổ biến nhất cho cơ sở dữ liệu dựa trên SQL
SQLAlchemy là một ORM hỗ trợ giao tiếp giữa Python và các cơ sở dữ liệu SQL khác. Bạn có thể tạo các công cụ khác nhau cho các cơ sở dữ liệu khác nhau như MySQL, PostgreSQL, SQLite, v.v. SQLAlchemy thường được sử dụng cùng với thư viện pandas để cung cấp chức năng xử lý dữ liệu hoàn chỉnh
peewee là một ORM nhẹ và nhanh, thiết lập nhanh chóng. Điều này khá hữu ích khi tương tác của bạn với cơ sở dữ liệu bị giới hạn trong việc trích xuất một vài bản ghi. Ví dụ: nếu bạn cần sao chép các bản ghi đã chọn từ cơ sở dữ liệu MySQL sang tệp CSV, thì peewee có thể là lựa chọn tốt nhất của bạn
Django ORM là một trong những tính năng mạnh mẽ nhất của Django và được cung cấp cùng với khung web Django. Nó có thể tương tác với nhiều loại cơ sở dữ liệu như SQLite, PostgreSQL và MySQL. Nhiều ứng dụng dựa trên Django sử dụng Django ORM để mô hình hóa dữ liệu và truy vấn cơ bản nhưng thường chuyển sang SQLAlchemy cho các yêu cầu phức tạp hơn
Bạn có thể tìm thấy một trong những cách tiếp cận này phù hợp hơn cho ứng dụng của mình. Nếu bạn không chắc chắn nên sử dụng cái nào, thì tốt nhất nên sử dụng Trình kết nối/Python MySQL được đề xuất chính thức mà bạn đã thấy trong hướng dẫn này
Phần kết luận
Trong hướng dẫn này, bạn đã biết cách sử dụng MySQL Connector/Python để tích hợp cơ sở dữ liệu MySQL với ứng dụng Python của bạn. Bạn cũng đã thấy một số tính năng độc đáo của cơ sở dữ liệu MySQL giúp phân biệt nó với các cơ sở dữ liệu SQL khác
Đồng thời, bạn đã học được một số phương pháp hay nhất về lập trình đáng để xem xét khi thiết lập kết nối, tạo bảng cũng như chèn và cập nhật bản ghi trong ứng dụng cơ sở dữ liệu. Bạn cũng đã phát triển cơ sở dữ liệu MySQL mẫu cho hệ thống xếp hạng phim trực tuyến và tương tác với nó trực tiếp từ ứng dụng Python của bạn
Trong hướng dẫn này, bạn đã học cách
- Kết nối ứng dụng Python của bạn với cơ sở dữ liệu MySQL
- Mang dữ liệu từ cơ sở dữ liệu MySQL vào Python để phân tích thêm
- Thực thi các truy vấn SQL từ ứng dụng Python của bạn
- Xử lý ngoại lệ khi truy cập cơ sở dữ liệu
- Ngăn chặn các cuộc tấn công SQL injection vào ứng dụng của bạn
Nếu bạn quan tâm, Python cũng có các trình kết nối cho các DBMS khác như MongoDB và PostgreSQL. Để biết thêm thông tin, hãy xem Hướng dẫn cơ sở dữ liệu Python
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Chaitanya Baweja
Chaitanya là một Pythonista cuồng nhiệt và viết cho Real Python
» Tìm hiểu thêm về ChaitanyaMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Bartosz
Geir Arne
Joanna
Gia-cốp
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi