Đây là hướng dẫn lập trình MySQL Python. Nó bao gồm những kiến thức cơ bản về lập trình MySQL với Python. Nó sử dụng mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6. Các ví dụ đã được tạo và thử nghiệm trên Ubuntu Linux
MySQLdb là mô-đun cơ sở dữ liệu kế thừa Python 2 dành cho MySQL. Để lập trình Python 3 MySQL hiện đại, hãy sử dụng mô-đun PyMySQL. Xem hướng dẫn PyMySQL
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở hàng đầu. Nó là một hệ thống quản lý cơ sở dữ liệu đa người dùng, đa luồng. MySQL đặc biệt phổ biến trên web. Nó là một phần của nền tảng LAMP rất phổ biến bao gồm Linux, Apache, MySQL và PHP. Hiện tại MySQL thuộc sở hữu của Oracle
Cơ sở dữ liệu MySQL có sẵn trên hầu hết các nền tảng hệ điều hành quan trọng. Nó chạy trên BSD Unix, Linux, Windows hoặc Mac OS. Wikipedia và YouTube sử dụng MySQL. Các trang web này quản lý hàng triệu truy vấn mỗi ngày. MySQL có hai phiên bản. Hệ thống máy chủ MySQL và hệ thống nhúng MySQL
cài đặt MySQLdb
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning
Chúng tôi tìm kiếm tên gói cho mô-đun MySQLdb. Chúng tôi sử dụng lệnh
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye7 để tìm ra nó
$ sudo apt-get install python-mysqldb
Ở đây chúng tôi cài đặt giao diện Python cho cơ sở dữ liệu MySQL;
Nếu bạn chưa cài đặt MySQL, chúng ta phải cài đặt nó
$ sudo apt-get install mysql-server
Lệnh này cài đặt máy chủ MySQL và nhiều gói khác. Trong khi cài đặt gói, chúng tôi được nhắc nhập mật khẩu cho tài khoản root MySQL
Tiếp theo, chúng ta sẽ tạo một người dùng cơ sở dữ liệu mới và một cơ sở dữ liệu mới. Chúng tôi sử dụng ứng dụng khách
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye9________số 8
Chúng tôi kết nối với cơ sở dữ liệu bằng tài khoản root. Chúng tôi hiển thị tất cả các cơ sở dữ liệu có sẵn với câu lệnh
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]1
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning0
Chúng tôi tạo một cơ sở dữ liệu
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]2 mới. Chúng tôi sẽ sử dụng cơ sở dữ liệu này trong suốt hướng dẫn
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye
Chúng tôi tạo một người dùng cơ sở dữ liệu mới. Chúng tôi cấp tất cả các đặc quyền cho người dùng này đối với tất cả các bảng của cơ sở dữ liệu
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]2
mô-đun _mysql
Mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye8 triển khai trực tiếp API MySQL C. Nó không tương thích với giao diện API Python DB. Nói chung, các lập trình viên thích mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6 hướng đối tượng hơn. Chúng tôi sẽ quan tâm đến mô-đun chữ cái. Ở đây chúng tôi chỉ trình bày một ví dụ nhỏ với mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye8
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]
Ví dụ sẽ lấy và in phiên bản của cơ sở dữ liệu MySQL. Đối với điều này, chúng tôi sử dụng câu lệnh SQL
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]7
mô-đun MySQLdb
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6 là một trình bao bọc Python mỏng xung quanh
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye8. Nó tương thích với API Python DB, giúp mã dễ mang theo hơn. Sử dụng mô hình này là cách ưa thích để làm việc với MySQL
Ví dụ về phiên bản MySQLdb
Trong ví dụ đầu tiên, chúng ta sẽ lấy phiên bản của cơ sở dữ liệu MySQL
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye1
Trong tập lệnh này, chúng tôi kết nối với cơ sở dữ liệu testdb và thực thi câu lệnh
#!/usr/bin/python # -*- coding: utf-8 -*- import _mysql import sys try: con = _mysql.connect['localhost', 'testuser', 'test623', 'testdb'] con.query["SELECT VERSION[]"] result = con.use_result[] print "MySQL version: %s" % \ result.fetch_row[][0] except _mysql.Error, e: print "Error %d: %s" % [e.args[0], e.args[1]] sys.exit[1] finally: if con: con.close[]7. Điều này sẽ trả về phiên bản hiện tại của cơ sở dữ liệu MySQL. Chúng tôi in nó ra bàn điều khiểnQuảng cáo
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye3
Chúng tôi nhập mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye5
Chúng tôi kết nối với cơ sở dữ liệu bằng phương thức
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye12. Chúng tôi vượt qua bốn tham số. tên máy chủ, tên người dùng cơ sở dữ liệu, mật khẩu và tên cơ sở dữ liệu
$ sudo apt-get install python-mysqldb0
Từ kết nối, chúng tôi nhận được đối tượng con trỏ. Con trỏ được sử dụng để duyệt qua các bản ghi từ tập kết quả. Chúng tôi gọi phương thức
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye13 của con trỏ và thực thi câu lệnh SQL
$ sudo apt-get install python-mysqldb1
Chúng tôi lấy dữ liệu. Vì chúng tôi chỉ truy xuất một bản ghi, nên chúng tôi gọi phương thức
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye14
$ sudo apt-get install python-mysqldb2
Chúng tôi in dữ liệu mà chúng tôi đã lấy ra bàn điều khiển
$ sudo apt-get install python-mysqldb3
Chúng tôi kiểm tra lỗi
$ sudo apt-get install python-mysqldb4
Trong bước cuối cùng, chúng tôi giải phóng tài nguyên
$ sudo apt-get install python-mysqldb5
Đây là một đầu ra mẫu
MySQLdb tạo và điền vào bảng
Chúng tôi tạo một bảng và điền vào đó một số dữ liệu
$ sudo apt-get install python-mysqldb6
Chúng tôi tạo một bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15 và thêm năm tác giả vào đó
$ sudo apt-get install python-mysqldb7
Với từ khóa with, trình thông dịch Python sẽ tự động giải phóng tài nguyên. Nó cũng cung cấp xử lý lỗi
Quảng cáo$ sudo apt-get install python-mysqldb8
Câu lệnh SQL này tạo một bảng cơ sở dữ liệu mới có tên là
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15. Nó có hai cột.
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye17 và
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye18
$ sudo apt-get install python-mysqldb9
Chúng tôi sử dụng câu lệnh
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye19 để chèn tác giả vào bảng. Ở đây chúng tôi thêm hai hàng
$ sudo apt-get install mysql-server0
Sau khi thực thi tập lệnh, chúng tôi sử dụng công cụ máy khách
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye9 để chọn tất cả dữ liệu từ bảng Nhà văn
Tìm nạp MySQLdb
Phương thức
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye31 tìm nạp tất cả [hoặc tất cả các hàng còn lại] của tập kết quả truy vấn và trả về danh sách các bộQuảng cáo
$ sudo apt-get install mysql-server1
Trong ví dụ này, chúng tôi lấy tất cả dữ liệu từ bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15
$ sudo apt-get install mysql-server2
Câu lệnh SQL này chọn tất cả dữ liệu từ bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15
$ sudo apt-get install mysql-server3
Phương thức
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye31 lấy tất cả các bản ghi. Nó trả về một tập kết quả. Về mặt kỹ thuật, nó là một bộ của các bộ. Mỗi bộ dữ liệu bên trong đại diện cho một hàng trong bảngQuảng cáo
$ sudo apt-get install mysql-server4
Chúng tôi in dữ liệu ra bàn điều khiển, từng hàng
$ sudo apt-get install mysql-server5
Đây là đầu ra của ví dụ
Trả lại tất cả dữ liệu tại một thời điểm có thể không khả thi. Chúng tôi có thể tìm nạp từng hàng một
$ sudo apt-get install mysql-server6
Chúng tôi lại in dữ liệu từ bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15 ra bàn điều khiển. Lần này, chúng tôi tìm nạp từng hàng một
$ sudo apt-get install mysql-server7
Chúng tôi tìm nạp từng hàng một bằng phương pháp
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye14. Thuộc tính rowcount cho biết số hàng được trả về bởi câu lệnh SQL
$ sudo apt-get install mysql-server8
Đây là đầu ra của ví dụ
Con trỏ từ điển MySQLdb
Có nhiều loại con trỏ trong mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6. Con trỏ mặc định trả về dữ liệu trong một bộ gồm nhiều bộ. Khi chúng tôi sử dụng con trỏ từ điển, dữ liệu được gửi dưới dạng từ điển Python. Bằng cách này, chúng ta có thể tham khảo dữ liệu theo tên cột của chúng
$ sudo apt-get install mysql-server9
Trong ví dụ này, chúng tôi lấy bốn hàng đầu tiên của bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15 bằng cách sử dụng con trỏ từ điển
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]0
Chúng tôi sử dụng con trỏ từ điển
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye39
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]1
Chúng tôi lấy bốn hàng từ bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]2
Chúng tôi đề cập đến dữ liệu theo tên cột của bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]3
đầu ra ví dụ
Tiêu đề cột MySQLdb
Tiếp theo chúng tôi sẽ trình bày cách in tiêu đề cột với dữ liệu từ bảng cơ sở dữ liệu
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]4
Một lần nữa, chúng tôi in nội dung của bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15 ra bàn điều khiển. Bây giờ, chúng tôi cũng bao gồm tên của các cột. Tên cột được coi là 'siêu dữ liệu'. Nó được lấy từ đối tượng con trỏ
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]5
Thuộc tính mô tả của con trỏ trả về thông tin về từng cột kết quả của truy vấn
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]6
Ở đây chúng tôi in và định dạng tên cột của bảng
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]7
Và ở đây, chúng tôi duyệt và in dữ liệu
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]8
Đây là đầu ra
MySQLdb báo cáo chuẩn bị
Khi chúng tôi viết các câu lệnh đã chuẩn bị, chúng tôi sử dụng các trình giữ chỗ thay vì viết trực tiếp các giá trị vào các câu lệnh. Báo cáo được chuẩn bị tăng tính bảo mật và hiệu suất. Đặc tả API Python DB đề xuất năm cách khác nhau để xây dựng các câu lệnh đã chuẩn bị. Mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6 hỗ trợ một trong số chúng, mã định dạng ANSI
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye54
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set [0.00 sec]9
Chúng tôi thay đổi tên của một tác giả trên hàng thứ tư
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning00
Chúng tôi sử dụng hai trình giữ chỗ được xác định bởi các điểm đánh dấu
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye55. Trước khi câu lệnh SQL được thực thi, các giá trị được liên kết với các trình giữ chỗ của chúng
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning01
Chúng tôi đã cập nhật một hàng
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning02
Tác giả ở hàng thứ tư đã được thay đổi thành công
Mọi người thường tìm cách chèn hình ảnh vào cơ sở dữ liệu. Chúng tôi sẽ chỉ ra cách nó có thể được thực hiện trong SQLite và Python. Lưu ý rằng một số người không khuyên bạn nên đưa hình ảnh vào cơ sở dữ liệu. Hình ảnh là dữ liệu nhị phân. Cơ sở dữ liệu MySQL có một kiểu dữ liệu đặc biệt để lưu trữ dữ liệu nhị phân được gọi là
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye56 [Đối tượng lớn nhị phân].
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye57,
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye56,
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye59 và
$ sudo apt-get install python-mysqldb00 là các biến thể của loại đối tượng nhị phân
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning03
Đối với ví dụ này, chúng tôi tạo một bảng mới có tên là
$ sudo apt-get install python-mysqldb01
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning04
Trong đoạn mã trên, chúng tôi đọc một hình ảnh JPG từ đĩa và chèn nó vào bảng
$ sudo apt-get install python-mysqldb01Quảng cáo
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning05
Phương pháp
$ sudo apt-get install python-mysqldb03 đọc dữ liệu nhị phân từ tệp JPG, nằm trong thư mục làm việc hiện tại
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning06
Chúng tôi chèn dữ liệu hình ảnh vào bảng
$ sudo apt-get install python-mysqldb01
MySQLdb đọc hình ảnh
Trong ví dụ trước, chúng ta đã chèn một hình ảnh vào bảng cơ sở dữ liệu. Bây giờ chúng ta sẽ đọc lại hình ảnh từ bảng
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning07
Chúng tôi đọc một hình ảnh từ bảng
$ sudo apt-get install python-mysqldb01
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning08
Chúng tôi chọn một bản ghi từ bảng
$ apt-cache search MySQLdb python-mysqldb - A Python interface to MySQL python-mysqldb-dbg - A Python interface to MySQL [debug extension] bibus - bibliographic database eikazo - graphical frontend for SANE designed for mass-scanning09
Chúng tôi mở một tệp nhị phân có thể ghi
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye0
Chúng tôi ghi dữ liệu vào đĩa
Bây giờ chúng ta sẽ có một hình ảnh có tên là
$ sudo apt-get install python-mysqldb06 trong thư mục hiện tại của chúng ta. Chúng tôi có thể kiểm tra xem đó có phải là hình ảnh mà chúng tôi đã chèn vào bảng không
Giao dịch là một đơn vị nguyên tử của hoạt động cơ sở dữ liệu đối với dữ liệu trong một hoặc nhiều cơ sở dữ liệu. Tác động của tất cả các câu lệnh SQL trong một giao dịch có thể được cam kết hoàn toàn với cơ sở dữ liệu hoặc tất cả được khôi phục
Đối với cơ sở dữ liệu hỗ trợ giao dịch, giao diện Python âm thầm bắt đầu giao dịch khi con trỏ được tạo. Phương thức
$ sudo apt-get install python-mysqldb07 xác nhận các bản cập nhật được thực hiện bằng con trỏ đó và phương thức
$ sudo apt-get install python-mysqldb08 loại bỏ chúng. Mỗi phương thức bắt đầu một giao dịch mới
Cơ sở dữ liệu MySQL có các loại công cụ lưu trữ khác nhau. Phổ biến nhất là các công cụ MyISAM và InnoDB. Kể từ MySQL 5. 5, InnoDB trở thành công cụ lưu trữ mặc định. Có sự đánh đổi giữa bảo mật dữ liệu và tốc độ cơ sở dữ liệu. Các bảng MyISAM xử lý nhanh hơn và chúng không hỗ trợ các giao dịch. Các phương thức
$ sudo apt-get install python-mysqldb07 và
$ sudo apt-get install python-mysqldb08 không được triển khai. họ không làm gì cả. Mặt khác, các bảng InnoDB an toàn hơn trước việc mất dữ liệu. Họ hỗ trợ các giao dịch. Chúng xử lý chậm hơn
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye1
Chúng tôi tạo lại bảng
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye15. Chúng tôi rõ ràng làm việc với các giao dịch
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye2
Trong Python DB API, chúng tôi không gọi câu lệnh BEGIN để bắt đầu giao dịch. Một giao dịch được bắt đầu khi con trỏ được tạo
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye3
Chúng tôi đang xử lý một loại bảng InnoDB. Đối với các phiên bản MySQL cũ hơn [ CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye 4
Chúng ta phải kết thúc giao dịch bằng phương thức
$ sudo apt-get install python-mysqldb07 hoặc
$ sudo apt-get install python-mysqldb08. Nếu chúng ta nhận xét dòng này, bảng được tạo nhưng dữ liệu không được ghi vào bảng
Trong hướng dẫn này, chúng tôi đã làm việc với các giao dịch mà không nêu rõ chúng. Chúng tôi đã sử dụng trình quản lý bối cảnh. Trình quản lý ngữ cảnh xử lý đầu vào và đầu ra khỏi ngữ cảnh thời gian chạy mong muốn để thực thi khối mã. Trình quản lý bối cảnh thường được gọi bằng cách sử dụng câu lệnh
$ sudo apt-get install python-mysqldb15
Các đối tượng kết nối trong mô-đun
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye6 có thể được sử dụng làm trình quản lý ngữ cảnh. Họ tự động cam kết hoặc khôi phục giao dịch. Trình quản lý bối cảnh kết nối làm sạch mã bằng cách loại bỏ các câu lệnh
$ sudo apt-get install python-mysqldb17,
$ sudo apt-get install python-mysqldb18 và
$ sudo apt-get install python-mysqldb19
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected [0.00 sec] mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected [0.00 sec] mysql> quit; Bye5
Trong ví dụ mã của chúng tôi, trình quản lý ngữ cảnh xử lý tất cả các công việc cần thiết để xử lý lỗi. Nó tự động cam kết hoặc khôi phục giao dịch
Đây là hướng dẫn MySQL Python. Nó đã sử dụng mô-đun MySQLdb kế thừa để hoạt động với MySQL. Tham khảo hướng dẫn PyMySQL để làm việc với mô-đun PyMySQL hiện đại