MySQL kết nối lại Python
Trong , bạn đã cài đặt MySQL Connector/Python và đảm bảo rằng mô-đun đã hoạt động. Tuy nhiên, việc in chuỗi phiên bản cho trình kết nối hầu như không thú vị lắm, vì vậy blog này sẽ bắt đầu hành trình khám phá các tính năng của hai API cũ Show
mysql. mô-đun trình kết nối bao gồm việc triển khai API Cơ sở dữ liệu Python, được xác định trong PEP249. Điều này bao gồm tùy chọn sử dụng Tiện ích mở rộng C trong khi sử dụng cùng một API. Bài viết này trình bày chi tiết về cách tạo và định cấu hình kết nối với MySQL. Tạo kết nối rất đơn giản và là điều đầu tiên bạn sẽ học. Tuy nhiên, có một chút kết nối hơn là chỉ tạo ra nó. Phần còn lại của blog sẽ thảo luận về cách định cấu hình kết nối, bao gồm các mẹo để tránh mã hóa cứng tên người dùng và mật khẩu vào ứng dụng. Bài viết kết thúc bằng phần thảo luận về các tùy chọn khác liên quan đến kết nối, đặc biệt tập trung vào bộ ký tự Tạo kết nối từ PythonPhải mất một số công việc để đi đến điểm này, nhưng bây giờ bạn đã sẵn sàng kết nối với MySQL từ Python lần đầu tiên. Phần này sẽ đi qua cú pháp tạo kết nối, các tùy chọn kết nối phổ biến nhất, ví dụ về tạo kết nối, định cấu hình lại kết nối và một số phương pháp hay nhất cho kết nối cú phápCó một số cách để tạo kết nối. Bốn người trong số họ là
Lớp 0 là triển khai Python thuần túy. Ngoài ra, lớp 1 có thể được sử dụng, lớp này cung cấp triển khai phần phụ trợ Tiện ích mở rộng C cho API cơ sở dữ liệu PythonTất cả các phương thức kết thúc với cùng một đối tượng kết nối và tất cả chúng đều lấy các tùy chọn kết nối làm đối số từ khóa. Điều này có nghĩa là bạn có thể chọn bất kỳ cách nào để tạo kết nối phù hợp nhất với chương trình. Tuy nhiên, vì hàm 5 là mạnh nhất nên đây là cách được ưu tiên để kết nối vì nó giúp dễ dàng chuyển đổi giữa triển khai Python thuần túy và Tiện ích mở rộng C hoặc để bật kết nối tổng hợp hoặc chuyển đổi dự phòng
Hình 1 hiển thị quy trình cơ bản của việc sử dụng bốn cách để tạo kết nối. Các hộp màu đỏ (xám đậm) được gọi trực tiếp từ mã ứng dụng và các hộp màu vàng (xám nhạt) được gọi bằng phương thức cuối cùng được gọi là gián tiếp. Hình này sử dụng lớp MySQLConnection; Hình 1 Quy trình tạo kết nối Tuyến ngoài cùng bên trái là tuyến sử dụng hàm 5. Chương trình Python gọi hàm với các đối số kết nối và sau đó hàm xử lý phần còn lại. Hình này giả sử một kết nối MySQLConnection (sử dụng triển khai Python thuần túy) được tạo, nhưng hàm cũng có thể trả về một đối tượng CMySQLConnection nếu Tiện ích mở rộng C được sử dụng. Cú pháp cơ bản của hàm 5 là
Tuyến đường thứ hai từ bên trái có chương trình Python gửi các đối số kết nối tới hàm tạo khi khởi tạo lớp 0. Điều này kích hoạt hàm tạo gọi phương thức_______5_______7, phương thức này sẽ gọi phương thức config(). Cú pháp khi sử dụng lớp 0 là
Trong lộ trình thứ ba từ bên trái, lớp 0 được khởi tạo đầu tiên và sau đó phương thức 7 được gọi một cách rõ ràng. Cú pháp mã trở thành
Cuối cùng, trong lộ trình ngoài cùng bên phải, tất cả các bước được thực hiện rõ ràng. Lưu ý rằng thứ tự gọi các phương thức 7 và 2 trong trường hợp này bị đảo ngược so với ba cách tạo kết nối khác. Cú pháp là
Trước khi tạo một số kết nối thực, cần xem qua các tùy chọn phổ biến nhất được sử dụng khi tạo kết nối Tùy chọn kết nối phổ biếnCác tùy chọn được sử dụng phổ biến nhất để chỉ định cách kết nối với MySQL, xác thực ai và sử dụng mật khẩu nào được tóm tắt trong Bảng 1 Bảng 1 Các tùy chọn liên quan đến kết nối phổ biến Tranh luận Giá trị mặc định Sự miêu tả 3127. 0. 0. 1 Tên máy chủ lưu trữ, nơi cài đặt phiên bản MySQL mà bạn muốn kết nối. Mặc định là kết nối với loopback (đó là máy chủ cục bộ) 43306 Cổng mà MySQL đang lắng nghe. Cổng 5 là cổng MySQL tiêu chuẩn 6Trên Linux và Unix, có thể kết nối với phiên bản MySQL trên máy chủ lưu trữ cục bộ bằng cách sử dụng ổ cắm Unix. Chỉ định đường dẫn đến tệp ổ cắm 7Tên người dùng của người dùng ứng dụng. Không bao gồm @ và tên máy chủ sau; . Chỉ cần chỉ định pyuser 8Mật khẩu để xác thực. Đối với người dùng thử nghiệm, đây sẽ là Py@pp4Demo 9Đường dẫn đến tệp chứa cơ quan cấp chứng chỉ SSL (CA) 0Đường dẫn đến tệp chứa chứng chỉ SSL công khai 1Mật mã SSL để sử dụng cho kết nối. Bạn có thể nhận danh sách các mật mã hợp lệ bằng cách kết nối với MySQL bằng SSL và thực hiện truy vấn HIỂN THỊ TÌNH TRẠNG TOÀN CẦU NHƯ ‘Ssl_cipher_list’; 3Buộc kết nối không phải SSL 4Đường dẫn đến tệp chứa khóa SSL riêng 5Sai Trình kết nối MySQL/Python có nên xác minh chứng chỉ được sử dụng bởi Máy chủ MySQL dựa trên CA được chỉ định với tùy chọn 9 hay khôngVí dụ, các tên tùy chọn có vẻ quen thuộc nếu bạn đã sử dụng ứng dụng khách dòng lệnh MySQL. Đó không phải là một sự trùng hợp ngẫu nhiên. Sử dụng các tùy chọn này, có thể trình bày cách tạo kết nối
Ví dụ kết nốiĐã đến lúc kết hợp bốn cách tạo kết nối cũng như tùy chọn kết nối phổ biến nhất để tạo các ví dụ mã nguồn để tạo kết nối MySQL Connector/Python. Liệt kê 1 hiển thị cách kết nối bằng bốn cách tạo kết nối. Các ví dụ theo thứ tự như khi chúng được thảo luận trước đó trong phần
Liệt kê 1 Ví dụ về kết nối với MySQL Bốn kết nối sử dụng các tùy chọn kết nối giống nhau. Khi kết nối được tạo, ID kết nối (từ phía Máy chủ MySQL) của kết nối được in bằng thuộc tính 7 của kết nối. Cuối cùng, kết nối được đóng lại bằng phương pháp 8. Cách tốt nhất là luôn đóng kết nối một cách rõ ràng khi ứng dụng hoàn tất với nó
Đầu ra tương tự như mẫu sau ngoại trừ ID kết nối sẽ khác
Cấu hình lại và kết nối lạiĐiều này thường không được thực hiện, nhưng có thể cấu hình lại kết nối hiện có và kết nối lại. Trong bối cảnh này, cấu hình lại có nghĩa là có khả năng thay đổi tất cả các tùy chọn bao gồm cả phiên bản Máy chủ MySQL mà ứng dụng được kết nối với. Khi những thay đổi như vậy được thực hiện, cần thông báo rõ ràng cho MySQL Connector/Python để kết nối lại Để định cấu hình lại kết nối, hãy sử dụng phương pháp 2 giống như cách bạn đã làm trước khi thực hiện kết nối ban đầu. Khi cấu hình mới, mong muốn đã được tạo, hãy gọi phương thức 0 nếu bất kỳ thay đổi cấu hình nào yêu cầu kết nối mới. Gọi 0 sẽ đóng kết nối cũ và tạo một kết nối mới với cấu hình mới. Liệt kê 2 hiển thị một ví dụ về cấu hình lại kết nối
Liệt kê 2 Cấu hình lại một kết nối Ví dụ này yêu cầu phải có tài khoản người dùng thứ hai trên cùng một phiên bản MySQL. Người dùng giống với kết nối 2 hiện có, nhưng được xác định để kết nối từ địa chỉ IP công cộng (thay thế bằng địa chỉ IP của máy tính của bạn hoặc nếu địa chỉ IP phân giải bằng tên máy chủ)
Điều cần thiết là bất kỳ tường lửa nào cũng cho phép kết nối Như bạn có thể thấy từ ví dụ, không cần thiết phải thay đổi tất cả các tùy chọn cấu hình. Những cái không được đặt rõ ràng trong bộ tùy chọn mới sẽ giữ nguyên giá trị cũ của chúng. Đầu ra của chương trình là (ngoại trừ ID)
Chủ đề cuối cùng của phần này là một số phương pháp hay nhất về kết nối Thực tiễn tốt nhất về kết nốiCó một vài thực tiễn tốt nhất nên tuân theo khi nói đến kết nối. Luôn khó khăn với các phương pháp hay nhất vì tất cả các ứng dụng đều có các yêu cầu riêng. Vì vậy, các đề xuất sẽ tập trung vào khía cạnh kỹ thuật của MySQL Connector/Python Các thực hành tốt nhất chính là
Các ví dụ cho đến nay đã có một lỗ hổng lớn. họ đã mã hóa cứng không chỉ nơi kết nối mà còn cả tên người dùng và đặc biệt là mật khẩu. Điều này làm cho mã khó bảo trì hơn và nó cũng là một mối lo ngại về bảo mật vì mật khẩu hiển thị cho bất kỳ ai có quyền truy cập vào mã nguồn. Mã hóa cứng các tùy chọn kết nối cũng có nghĩa là hệ thống phát triển và sản xuất phải chia sẻ các tùy chọn kết nối hoặc quy trình triển khai cần thay đổi mã nguồn để cập nhật các tham số cấu hình
Không phải là một lựa chọn tốt, vì vậy phải tìm một giải pháp thay thế. Phần tiếp theo sẽ thảo luận về một giải pháp thay thế. sử dụng tập tin cấu hình Tệp cấu hìnhPhương pháp chỉ định các tùy chọn kết nối trực tiếp với lệnh gọi để tạo kết nối tới MySQL có thể rất hữu ích để thực hiện các kiểm tra nhanh, nhưng nó không thực tế và cũng không an toàn (đối với mật khẩu) để thực hiện trong các ứng dụng thực. Phần này sẽ bắt đầu thảo luận về một số lựa chọn thay thế và sau đó sẽ đi vào chi tiết cách sử dụng các tệp cấu hình MySQL Các lựa chọn thay thế để mã hóa cấu hìnhCó một số cách để tránh mã hóa cứng cấu hình kết nối vào mã nguồn. Có những ưu và nhược điểm đối với mỗi phương pháp, vì vậy không phải là vấn đề một kích thước phù hợp với tất cả. Bốn phương pháp sẽ được thảo luận
Cách tiếp cận tương tác là tuyệt vời nếu bạn đang viết một chương trình có thể được sử dụng bởi những người dùng khác nhau, vì vậy không biết chương trình sẽ kết nối với ai. Đó cũng là cách an toàn nhất để truyền mật khẩu cho chương trình. Tuy nhiên, sẽ không thuận tiện lắm đối với các quy trình giống daemon hơn khi yêu cầu bắt đầu quy trình theo cách thủ công mỗi khi cần khởi động lại nó Các biến môi trường có thể được sử dụng để chỉ định các tùy chọn cho phiên. Các tiến trình con sẽ kế thừa môi trường của tiến trình cha, do đó, các biến môi trường có thể được sử dụng để chuyển cài đặt cho một tiến trình con, chẳng hạn như từ shell đến ứng dụng. Đây có thể là một cách tuyệt vời để định cấu hình ứng dụng mà không yêu cầu tệp hoặc phân tích cú pháp các tùy chọn trên dòng lệnh. Ví dụ: đây là cách phổ biến để định cấu hình các ứng dụng chạy bên trong các vùng chứa như Docker Có một số nhược điểm khi sử dụng các biến môi trường. Khi tự động bắt đầu các quy trình, sẽ cần phải lưu trữ các biến môi trường trong một tệp, điều đó có nghĩa là nó sẽ trở thành một định dạng thay thế cho tệp cấu hình. Môi trường nói chung cũng tồn tại lâu dài; . Người dùng có đặc quyền cao cũng có thể đọc được các biến môi trường. Vì vậy, cần cẩn thận khi sử dụng các biến môi trường Sử dụng tệp cấu hình riêng của ứng dụng hoặc cung cấp các tùy chọn làm đối số dòng lệnh có nghĩa là tất cả cấu hình được thực hiện ở một nơi. Trong trường hợp này, các tùy chọn MySQL được xử lý giống như các tùy chọn khác và tất cả những gì được yêu cầu khi viết mã là chuyển các tùy chọn và giá trị của chúng cho kết nối MySQL
Có một cách khác, tuy nhiên. Trình kết nối MySQL/Python có hỗ trợ riêng để đọc các tệp cấu hình MySQL. Một số lý do để sử dụng phương pháp này đối với tệp cấu hình riêng của ứng dụng là ứng dụng có thể không cần tệp cấu hình ngoại trừ các tùy chọn liên quan đến MySQL hoặc có thể có các chủ sở hữu cấu hình ứng dụng và cấu hình MySQL khác nhau. Điều thứ hai có thể xảy ra nếu nhà phát triển chịu trách nhiệm xác định hành vi của chính ứng dụng nhưng quản trị viên cơ sở dữ liệu chịu trách nhiệm về các tùy chọn dành riêng cho MySQL Vì blog này nói về việc sử dụng các tính năng của Trình kết nối MySQL/Python thay vì lập trình Python chung, nên một trong bốn tùy chọn sẽ được thảo luận chi tiết hơn là tùy chọn sử dụng tệp cấu hình MySQL Sử dụng tệp cấu hình MySQLMySQL sử dụng định dạng tệp INI cho các tệp cấu hình của nó. Sau đây là một ví dụ đơn giản để sử dụng với MySQL Connector/Python sử dụng cùng cấu hình như trước đó trong bài viết này
Có hai tùy chọn kết nối kiểm soát việc sử dụng các tệp cấu hình MySQL
Theo quy ước, các tệp cấu hình MySQL được gọi là 7 trên Microsoft Windows và 8 trên các nền tảng khác. Không có yêu cầu đối với tên tệp hoặc phần mở rộng tệp theo quan điểm chức năngMột đặc điểm quan trọng cần lưu ý là tùy chọn 4 không đối xử bình đẳng với tất cả các nhóm. Cụ thể, nhóm 5 đặc biệt vì tất cả các tùy chọn trong nhóm này phải hợp lệ nếu không một ngoại lệ 1 sẽ được đưa ra. Đối với các nhóm khác, các tùy chọn không xác định sẽ bị bỏ qua. Lý do để bỏ qua các tùy chọn không xác định là một số chương trình có thể đọc các nhóm tùy chọn giống nhau. Ví dụ: nhóm máy khách cũng được đọc bởi máy khách dòng lệnh mysql và các chương trình máy khách MySQL khácLiệt kê 3 hiển thị một ví dụ về kết nối với MySQL bằng các tùy chọn kết nối được đọc từ tệp my. ini nằm trong cùng thư mục với chương trình 0Liệt kê 3 Sử dụng tệp cấu hình MySQL Đầu ra tương tự như các ví dụ trước in ID cho kết nối, ví dụ 1Trong một số trường hợp, bạn có thể muốn chia cấu hình MySQL thành nhiều tệp. Ví dụ: giả sử một số ứng dụng cần kết nối với cùng một phụ trợ MySQL, vì vậy chúng chia sẻ thông tin máy chủ và cổng, nhưng mỗi ứng dụng sử dụng thông tin đăng nhập khác nhau cho kết nối. Tiếp tục ví dụ, có thể tạo 2 file 2 và 3 với nội dung như sau 2Thay đổi duy nhất được yêu cầu đối với chương trình thử nghiệm là thay đổi giá trị của 4 thành một danh sách. Để chứng minh cách thiết lập tùy chọn 4, nó cũng được thêm vào chương trình. Mã nguồn kết quả có thể được nhìn thấy trong Liệt kê 4 3Liệt kê 4 Sử dụng Nhiều Tệp Cấu hình Đầu ra là (ngoại trừ ID, sẽ thay đổi từ lần thực thi này sang lần thực hiện khác) như sau 4Một xem xét cuối cùng là tên đường dẫn. Nếu một đường dẫn tương đối được chỉ định, thì đó là thư mục nơi Python được thực thi được sử dụng làm thư mục cơ sở. Lấy ví dụ, lệnh sau để thực thi một chương trình (ID nói chung sẽ khác) 5của anh ấy được thực thi trong khi 6 là thư mục làm việc hiện tại. nếu kiểm tra. py có 7, thì my. ini phải được đặt trong 6Một quan sát khác là đối với Microsoft Windows, việc sử dụng dấu gạch chéo ngược ( 9) hoặc dấu gạch chéo xuôi ( 0) để phân tách các thành phần đường dẫn (thư mục) là tùy chọn.Điều này kết thúc cuộc thảo luận về các tập tin cấu hình. Chủ đề cuối cùng của bài viết là các tùy chọn còn lại mà MySQL Connector/Python hỗ trợ cho kết nối Cấu hình chungCho đến nay, các tùy chọn cấu hình duy nhất đã được thảo luận là những tùy chọn cần thiết để chỉ định nơi kết nối, kết nối với ai và có sử dụng SSL hay không. Có một số tùy chọn khác liên quan nhiều hơn đến hành vi của ứng dụng. Các tùy chọn này là chủ đề của phần này Các tùy chọn không có trong danh sách các tùy chọn kết nối trước đó trong blog được tóm tắt trong Bảng 2 đến Bảng 5 với một bảng cho từng loại tùy chọn sau. kết nối, bộ ký tự, hành vi truy vấn và cảnh báo Sự liên quanCó nhiều tùy chọn kết nối hơn đã được thảo luận trong phần “”. Chúng không được sử dụng phổ biến nhưng có thể được yêu cầu cho một số trường hợp sử dụng. Các tùy chọn được tóm tắt trong Bảng 2. Một số tùy chọn sẽ được thảo luận chi tiết hơn sau bảng Bảng 2 Các tùy chọn liên quan đến kết nối ít phổ biến hơn Tên Giá trị mặc định Sự miêu tả 1Nên sử dụng plugin xác thực nào. Ví dụ, đây là yêu cầu khi sử dụng MySQL Connector/Python 2. 1 để kết nối với MySQL Server 8. 0 vì plugin xác thực mặc định của máy chủ không được hỗ trợ bởi các phiên bản MySQL Connector/Python cũ 2Một cách khác để định cấu hình một số tùy chọn thông qua cờ 3Sai Khi được bật, lưu lượng mạng được nén 4Phải đợi bao lâu trước khi hết thời gian khi tạo kết nối 5Chỉ định một lớp trình chuyển đổi tùy chỉnh để chuyển đổi dữ liệu hàng thô thành các loại Python 6Bộ từ điển chỉ định các phiên bản Máy chủ MySQL thay thế chuyển sang không thành công nếu kết nối chính không thành công. Điều này chỉ được hỗ trợ khi sử dụng chức năng 5 8Sai Khi True, IPv6 luôn được sử dụng khi có thể 9Tự động tạo ra Tên của nhóm kết nối. Theo mặc định, tên được tạo bằng cách nối các giá trị của tùy chọn kết nối máy chủ, cổng, người dùng và cơ sở dữ liệu. Tên có thể dài tối đa 0 (mặc định là 64) ký tự và được phép sử dụng các ký tự chữ và số cũng như các ký tự sau. 1, 2, 3, 4, 5, 6 và 7. Điều này chỉ được hỗ trợ bằng cách sử dụng hàm 5 hoặc bằng cách khởi tạo tổng hợp. Lớp xây dựng MySQLConnectionPool trực tiếp 9Thật Khi True, các biến phiên được đặt lại khi kết nối được trả về nhóm. Điều này chỉ được hỗ trợ bằng cách sử dụng hàm 5 hoặc bằng cách khởi tạo tổng hợp. Lớp xây dựng MySQLConnectionPool trực tiếp 015 Số lượng kết nối để giữ trong nhóm. Giá trị ít nhất phải là 1 và nhiều nhất là 02 (mặc định là 32). Điều này chỉ được hỗ trợ bằng cách sử dụng hàm 5 hoặc bằng cách khởi tạo tổng hợp. Lớp xây dựng MySQLConnectionPool trực tiếp 04Sai Khi True, việc triển khai Python thuần túy của trình kết nối được sử dụng. Khi Sai, Tiện ích mở rộng C được sử dụng. Nếu tùy chọn không được chỉ định, mặc định là sử dụng Tiện ích mở rộng C nếu nó được cài đặt; . Điều này chỉ được hỗ trợ bằng cách sử dụng mysql. tư nối. chức năng kết nối (). Trong hầu hết các trường hợp, nên sử dụng Tiện ích mở rộng C Tùy chọn 3 có thể được sử dụng để giảm lưu lượng mạng bằng cách nén dữ liệu được truyền giữa ứng dụng và Máy chủ MySQL (và ngược lại) với chi phí tài nguyên tính toán bổ sung. Điều này có thể đặc biệt hữu ích nếu các câu lệnh SQL lớn được gửi đến máy chủ hoặc các kết quả truy vấn lớn được trả về ứng dụng và ứng dụng được cài đặt trên máy chủ từ xaBốn tùy chọn đáng được chú ý hơn một chút là các tùy chọn 6 và 07. Tùy chọn 6 có thể được sử dụng để xác định một hoặc nhiều phiên bản Máy chủ MySQL mà Trình kết nối MySQL/Python sẽ không thành công nếu kết nối với phiên bản chính không thành công. Mỗi phiên bản Máy chủ MySQL thay thế được chỉ định làm từ điển trong bộ hoặc danh sách. Các tùy chọn 07 thiết lập nhóm kết nối mà ứng dụng có thể yêu cầu kết nối từTùy chọn 2 có thể được sử dụng để đặt một số tùy chọn. Danh sách các tùy chọn có sẵn có thể được xác định bằng cách sử dụng phương pháp 11 của hằng số 12 6Đầu ra từ Trình kết nối/Python 8. 0. 11 có thể được nhìn thấy trong Liệt kê 5. Tên của cờ khách hàng được liệt kê đầu tiên, tiếp theo là mô tả về những gì cờ kiểm soát. Hầu hết các cờ cũng có các tùy chọn dành riêng, nhưng có một số cờ bổ sung như 13 chỉ có thể được đặt thông qua 14 7Liệt kê 5 Danh sách các cờ khách hàng Để định cấu hình 2, hãy chỉ định danh sách các cờ sẽ được bật hoặc tắt. Để bật cờ, chỉ cần chỉ định tên của cờ; . Liệt kê 6 hiển thị một ví dụ để cho biết kết nối đó là một kết nối tương tác, nhưng nó không thể xử lý các mật khẩu đã hết hạn 8Liệt kê 6 Sử dụng cờ máy khách trong kết nối Điều này cho kết quả sau (một lần nữa ngoại trừ các giá trị của ID) 9Tùy chọn use_pure có thể được sử dụng để chỉ định liệu Tiện ích mở rộng C hay triển khai Python thuần túy của trình kết nối sẽ được sử dụng. Tiện ích mở rộng C cung cấp hiệu suất tốt hơn so với triển khai thuần túy, đặc biệt khi làm việc với các tập kết quả lớn và các câu lệnh đã chuẩn bị. Mặt khác, việc triển khai Python thuần túy được hỗ trợ trên nhiều nền tảng hơn, có thêm một vài tính năng và dễ dàng sửa đổi mã nguồn hơn. Tiện ích mở rộng C là mặc định trong phiên bản 8. 0. 11 trở lên khi nó được cài đặt, trong khi các phiên bản trước đó sử dụng triển khai Python thuần túy theo mặc định Tiện ích mở rộng C cũng có thể được sử dụng bằng cách nhập mô-đun_______15_______16 thay vì mô-đun 17 thông thườngCác tùy chọn kết nối khác sẽ không được thảo luận chi tiết hơn. Thay vào đó, tiêu điểm sẽ được chuyển đến các tùy chọn bộ ký tự Bộ ký tựBộ ký tự xác định cách các ký tự được mã hóa. Trong những ngày đầu của Internet, bộ ký tự ASCII thường được sử dụng. ASCII sử dụng bảy bit cho mỗi ký tự, tiết kiệm không gian hiệu quả nhưng điều đó có nghĩa là chỉ có 128 ký tự khác nhau khả dụng. Điều này hoạt động khá tốt đối với văn bản thuần túy bằng tiếng Anh, nhưng nó thiếu ký tự đối với các ngôn ngữ khác. Trong những năm qua, nhiều bộ ký tự khác đã được sử dụng, chẳng hạn như bộ ký tự Latinh Các bộ ký tự dành riêng cho ngôn ngữ giúp hỗ trợ tất cả các ngôn ngữ, nhưng có nhược điểm là cần có các mã hóa khác nhau cho các ngôn ngữ khác nhau. Một phản hồi cho điều đó là mã hóa Định dạng Chuyển đổi Unicode (UTF); . UTF-8 sử dụng một số byte thay đổi để lưu trữ các ký tự. 128 ký tự ASCII ban đầu có cùng mã hóa trong UTF-8; Cho đến khi và bao gồm MySQL Server 5. 7, bộ ký tự mặc định cho phía máy chủ là Latin1, nhưng điều này đã thay đổi trong MySQL 8. 0 khi 18 trở thành mặc định. Hậu tố mb4 chỉ ra rằng tối đa bốn byte được sử dụng cho mỗi ký tự (mb = nhiều byte). Lý do điều này là bắt buộc vì utf8 trong MySQL trước đây có nghĩa là mỗi ký tự được hỗ trợ tối đa ba byte cho mỗi ký tự. Tuy nhiên, việc triển khai UTF-8 ba byte bỏ lỡ một số biểu tượng cảm xúc và nó không được dùng nữa, vì vậy tốt hơn là sử dụng biến thể bốn byte. Bộ ký tự mặc định cho Trình kết nối/Python cho đến phiên bản 8. 0. 12 là utf8, đây là triển khai ba byte của UTF-8 (được gọi là 19 hoặc 20 trong Máy chủ MySQL). Bắt đầu từ phiên bản 8. 0. 12 mặc định là utf8mb4 như trong MySQL ServerNgoài ra còn có khái niệm đối chiếu để xem xét. Đối chiếu xác định cách so sánh hai ký tự hoặc chuỗi ký tự với nhau, chẳng hạn như liệu ä và a có được coi là cùng một ký tự khi so sánh hay không và liệu ss có được coi là ngang bằng với ß (s sắc nét trong tiếng Đức). Đối chiếu cũng xác định thứ tự sắp xếp của các ký tự và liệu so sánh có phân biệt chữ hoa chữ thường hay không. Mỗi bộ ký tự có một đối chiếu mặc định, nhưng cũng có thể yêu cầu đối chiếu một cách rõ ràng
Nhìn chung, các bộ ký tự và đối chiếu có sẵn trong MySQL không thay đổi nhiều giữa các phiên bản. Tuy nhiên, một trong những thay đổi lớn đối với MySQL Server 8. 0 là sự bổ sung của một loạt UCA 9. 0. 0 bộ sưu tập. Thông tin về các bộ ký tự có sẵn và đối chiếu mặc định của chúng có thể được tìm thấy bằng cách sử dụng bảng 23 trong Lược đồ thông tin, như trong Liệt kê 7 0Liệt kê 7 Bộ sưu tập bộ ký tự trong MySQL 8. 0. 11 Tương tự, các bộ sưu tập có sẵn cho một bộ ký tự cụ thể có thể được xác định bằng cách sử dụng bảng COLLATIONS. Danh sách hiển thị đầu ra cho bộ ký tự 18 1Liệt kê 8 Các bộ sưu tập có sẵn cho Bộ ký tự utf8mb4 Đầu ra hiển thị 73 đối chiếu có sẵn cho utf8mb4 trong MySQL Server 8. 0. 11. Tên đối chiếu bao gồm một số phần
Có ba tùy chọn liên quan đến bộ ký tự và đối chiếu cho MySQL Connector/Python. Chúng được tóm tắt trong Bảng Bảng 3 Tùy chọn liên quan đến bộ ký tự Tên Giá trị mặc định Sự miêu tả 28utf8mb4 Bộ ký tự được sử dụng cho kết nối. Trong Trình kết nối MySQL/Python 8. 0. 11 trở về trước, mặc định là utf8. Trong hầu hết các trường hợp, nên sử dụng 18 30utf8mb4_General_ci Đối chiếu để sử dụng để so sánh và sắp xếp các chuỗi. Trong nhiều trường hợp, mặc định có thể được sử dụng. Giá trị mặc định cho Trình kết nối MySQL/Python 8. 0. 11 trở về trước là 31. Trong máy chủ MySQL 8. 0, đối chiếu mặc định cho bộ ký tự utf8mb4 là 32 thường là một lựa chọn tốt trừ khi có các yêu cầu cụ thể 33Thật Có trả về chuỗi trong kết quả truy vấn dưới dạng chữ Python Unicode hay không. Giá trị mặc định là True và đây cũng thường là giá trị tốt nhất để sử dụng Liệt kê 9 cho thấy một ví dụ về cấu hình các tùy chọn của ký tự 34 2Có thể thay đổi bộ ký tự và đối chiếu được sử dụng bởi kết nối sau khi kết nối ban đầu với Máy chủ MySQL được thực hiện. Cách tốt nhất để làm điều này là thay đổi các thuộc tính bộ ký tự và đối chiếu của kết nối bằng cách sử dụng phương thức 35 như minh họa trong Liệt kê 10. Lưu ý rằng không giống như các ví dụ còn lại, ví dụ này trước tiên khởi tạo lớp MySQLConnection để có thể in bộ ký tự ban đầu và đối chiếu trước khi tạo kết nối 3Liệt kê 10 Thay đổi bộ ký tự của kết nối Như bạn có thể thấy từ ví dụ, các thuộc tính đối chiếu và bộ ký tự có thể được sử dụng ngay cả trước khi kết nối được thiết lập. Tuy nhiên, không thể sử dụng phương pháp 35 để thay đổi bộ ký tự hoặc đối chiếu cho đến khi kết nối được thiết lập
Việc thiết lập kết nối sẽ không thay đổi giá trị của các thuộc tính bộ ký tự và đối chiếu. Bộ ký tự có thể tự thay đổi, trong trường hợp đó, đối chiếu được đặt thành mặc định cho bộ ký tự. Trong trường hợp này, bộ ký tự được đặt thành 18, vì vậy bộ ký tự mặc định là 40Đối chiếu cũng có thể được đặt riêng và cuối cùng cả bộ ký tự và đối chiếu đều được đặt. Đầu ra của việc thực thi chương trình trong Liệt kê 10 bằng phiên bản 8. 0. 11 là 4Nếu bạn đang sử dụng Trình kết nối MySQL/Python 8. 0. 12 trở lên, bộ ký tự và đối chiếu cho Ban đầu và Kết nối là 18 và 40Hành vi truy vấnCó một số tùy chọn kiểm soát cách hoạt động của các truy vấn. Các phạm vi này từ việc xác định liệu các tính năng có được phép đối với cấu hình giao dịch hay không để xác định cách Trình kết nối MySQL/Python sẽ xử lý kết quả. Các tùy chọn được liệt kê trong Bảng 4 Bảng 4 Tùy chọn liên quan đến truy vấn Tên Giá trị mặc định Sự miêu tả 43Thật Câu lệnh LOAD DATA LOCAL INFILE có được phép hay không 44Sai Khi True, một COMMIT ẩn được thực thi sau mỗi truy vấn 45Sai Khi True, tập hợp kết quả được tìm nạp ngay lập tức và được lưu vào bộ đệm trong ứng dụng 46Sai Khi True, kết quả truy vấn được tìm nạp tự động nếu có hàng chưa được tìm nạp và một truy vấn mới được thực thi 47Cơ sở dữ liệu (lược đồ) nào sẽ được sử dụng làm mặc định cho các truy vấn trong đó tên cơ sở dữ liệu không được cung cấp rõ ràng cho một bảng 48Sai Theo mặc định, các giá trị kết quả được chuyển đổi thành các loại Python khi con trỏ được sử dụng. Khi đặt tùy chọn này thành True, kết quả được trả về mà không cần chuyển đổi 49(Máy chủ mặc định) Chế độ SQL được sử dụng khi thực hiện truy vấn. Xem https. // nhà phát triển. mysql. com/doc/refman/en/sql-mode. html 50Khi được đặt, dấu thời gian được chuyển đổi thành múi giờ đó thay vì sử dụng múi giờ phía máy chủ cảnh báoĐiều rất quan trọng là các cảnh báo và lỗi được xử lý đúng cách. Không làm như vậy có thể dẫn đến dữ liệu bị hỏng hoặc bị mất. Có hai tùy chọn kiểm soát cách Trình kết nối MySQL/Python xử lý cảnh báo khi bạn sử dụng con trỏ. Các tùy chọn được thể hiện trong Bảng 5 Bảng 5 Các tùy chọn liên quan đến cảnh báo dành cho con trỏ Tên Giá trị mặc định Sự miêu tả 51Sai Khi được đặt thành True, các cảnh báo sẽ tự động được tìm nạp sau mỗi truy vấn 52Sai Khi được đặt thành True, các cảnh báo sẽ tạo ra một ngoại lệ Tóm lượcBài viết này hướng dẫn cách tạo và định cấu hình kết nối từ chương trình Python đến cơ sở dữ liệu Máy chủ MySQL. Các chủ đề sau đây đã được thảo luận
Việc có thể tạo kết nối tới cơ sở dữ liệu là hoàn toàn tốt, nhưng nó không hữu ích lắm trừ khi bạn có thể thực hiện các truy vấn Làm cách nào để kết nối Trình kết nối MySQL trong Python?Để tạo kết nối giữa cơ sở dữ liệu MySQL và Python, phương thức connect() của mysql. mô-đun trình kết nối được sử dụng . Chúng tôi chuyển các chi tiết cơ sở dữ liệu như Tên máy chủ, tên người dùng và mật khẩu trong lệnh gọi phương thức, sau đó phương thức trả về đối tượng kết nối.
Làm cách nào để kiểm tra kết nối MySQL trong Python?Cách kết nối cơ sở dữ liệu MySQL bằng Python . Cài đặt mô-đun trình kết nối MySQL. Sử dụng lệnh pip để cài đặt trình kết nối MySQL Python. . Nhập mô-đun trình kết nối MySQL. . Sử dụng phương thức connect(). . Sử dụng phương thức con trỏ (). . Sử dụng phương thức exec(). . Trích xuất kết quả bằng cách sử dụng hàm tìm nạp (). Đóng con trỏ và các đối tượng kết nối Chúng ta có thể kết nối MySQL với Python không?Python cần trình điều khiển MySQL để truy cập cơ sở dữ liệu MySQL . Trong hướng dẫn này, chúng tôi sẽ sử dụng trình điều khiển "MySQL Connector". Chúng tôi khuyên bạn nên sử dụng PIP để cài đặt "MySQL Connector". PIP rất có thể đã được cài đặt trong môi trường Python của bạn.
Trình kết nối MySQL Connect trả về cái gì?Trình tạo connect() tạo kết nối đến máy chủ MySQL và trả về đối tượng MySQLConnection . |