Giao dịch pymysql

Nếu bạn muốn viết các ứng dụng di động trên cơ sở dữ liệu, hãy sử dụng MySQLdb và tránh sử dụng trực tiếp mô-đun này.

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
6 cung cấp một giao diện chủ yếu triển khai API MySQL C. Để biết thêm thông tin, hãy xem tài liệu về MySQL. Tài liệu cho mô-đun này hơi yếu vì có lẽ bạn nên sử dụng mô-đun MySQLdb cấp cao hơn. Nếu bạn thực sự cần nó, hãy sử dụng các tài liệu MySQL tiêu chuẩn và chuyển ngữ khi cần thiết

Bản dịch API MySQL C

API MySQL C đã được bao bọc theo cách hướng đối tượng. Các cấu trúc dữ liệu MySQL duy nhất được triển khai là các loại

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
7 [xử lý kết nối cơ sở dữ liệu] và
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
8 [xử lý kết quả]. Nói chung, bất kỳ hàm nào lấy
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
9 làm đối số giờ đây là phương thức của đối tượng kết nối và bất kỳ hàm nào lấy
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
0 làm đối số đều là phương thức của đối tượng kết quả. Các chức năng không yêu cầu cấu trúc dữ liệu MySQL nào được triển khai dưới dạng các chức năng trong mô-đun. Các chức năng yêu cầu một trong các cấu trúc dữ liệu MySQL khác thường không được triển khai. Các chức năng không dùng nữa không được triển khai. Trong mọi trường hợp, tiền tố
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
1 bị loại bỏ khỏi tên. Hầu hết các phương thức
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
2 được liệt kê cũng có sẵn dưới dạng các phương thức đối tượng Kết nối MySQLdb. Việc sử dụng chúng là không di động

Ánh xạ chức năng MySQL C API

C API
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
3
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
5
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
6
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
7
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
8
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
9
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
40
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
41
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
42
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
43
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
44
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
46
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
47
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
48
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
49
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
40
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
41
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
42
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
43
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
44
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
46
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
47
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
48
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
49
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
40
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
41
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
42
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
43
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
44
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
46
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
47
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
48
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
49
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
40
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
41
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
42
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
43
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
44various options to
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
46
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
47
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
48
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
49
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
40
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
42
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
49
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
44
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
46
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
47
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
48
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
49
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
40
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
41
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
42
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
43
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
44
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
46
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
47 option to
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
49
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
40
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
41
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
42
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
43
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
44
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
45
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
46
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
47
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
48
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
49
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
00
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
01
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
02
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
03
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
04
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
05
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
06
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
07
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
08

Một số ví dụ _mysql

Được rồi, vì vậy bạn vẫn muốn sử dụng

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
3. Dưới đây là một số ví dụ

Kết nối cơ sở dữ liệu đơn giản nhất có thể là

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4

Điều này tạo kết nối đến máy chủ MySQL chạy trên máy cục bộ bằng cách sử dụng ổ cắm UNIX tiêu chuẩn [hoặc ống có tên trên Windows], tên đăng nhập của bạn [từ biến môi trường USER], không có mật khẩu và không có cơ sở dữ liệu. Rất có thể bạn cần cung cấp thêm thông tin

db=_mysql.connect["localhost","joebob","moonpie","thangs"]

Thao tác này tạo kết nối đến máy chủ MySQL chạy trên máy cục bộ thông qua ổ cắm UNIX [hoặc ống có tên], tên người dùng "joebob", mật khẩu "moonpie" và chọn cơ sở dữ liệu ban đầu "thangs"

Chúng tôi thậm chí còn chưa bắt đầu chạm vào tất cả các thông số mà

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
11 có thể thực hiện. Vì lý do này, tôi thích sử dụng tham số từ khóa

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]

Điều này thực hiện chính xác những gì ví dụ trước đã làm, nhưng dễ đọc hơn. Nhưng vì máy chủ mặc định là "localhost" và nếu tên đăng nhập của bạn thực sự là "joebob", bạn có thể rút ngắn nó thành thế này

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
4

Các ổ cắm UNIX và các đường dẫn có tên không hoạt động trên mạng, vì vậy nếu bạn chỉ định một máy chủ không phải localhost, TCP sẽ được sử dụng và bạn có thể chỉ định một cổng lẻ nếu cần [cổng mặc định là 3306]

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
4

Nếu thực sự phải làm như vậy, bạn có thể kết nối với máy chủ cục bộ bằng TCP bằng cách chỉ định tên máy chủ đầy đủ hoặc 127. 0. 0. 1

Nói chung, đặt mật khẩu vào mã của bạn không phải là một ý tưởng hay

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
4

Điều này thực hiện những gì ví dụ trước thực hiện, nhưng lấy tên người dùng và mật khẩu cũng như các tham số khác từ ~/. của tôi. cnf [các hệ thống giống UNIX]. Đọc về các tệp tùy chọn để biết thêm chi tiết

Vì vậy, bây giờ bạn có một kết nối mở là

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
12 và muốn thực hiện một truy vấn. Chà, không có con trỏ trong MySQL và không có tham số thay thế, vì vậy bạn phải chuyển một chuỗi truy vấn hoàn chỉnh tới
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
13

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4

Không có giá trị trả lại từ điều này, nhưng có thể tăng ngoại lệ. Các trường hợp ngoại lệ được xác định trong một mô-đun riêng biệt,

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
14, nhưng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
6 xuất chúng. Đọc đặc tả API DB PEP-249 để tìm hiểu xem chúng là gì hoặc bạn có thể sử dụng công cụ bắt tất cả
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
16

Lúc này truy vấn của bạn đã được thực hiện và bạn cần lấy kết quả. Bạn có hai lựa chọn

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4

Cả hai phương thức đều trả về một đối tượng kết quả. Có gì khác biệt? . Nếu tập kết quả của bạn thực sự lớn, đây có thể là một vấn đề. Một cách giải quyết vấn đề này là thêm mệnh đề

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
18 vào truy vấn của bạn, để giới hạn số lượng hàng được trả về. Cách khác là sử dụng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
19, giữ kết quả được đặt trong máy chủ và gửi từng hàng khi bạn tìm nạp. Tuy nhiên, điều này liên kết tài nguyên máy chủ và nó liên kết kết nối. Bạn không thể thực hiện thêm bất kỳ truy vấn nào cho đến khi bạn tìm nạp tất cả các hàng. Nói chung, tôi khuyên bạn nên sử dụng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
17 trừ khi tập kết quả của bạn thực sự lớn và bạn không thể sử dụng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
18 vì một số lý do

Bây giờ, để thực sự nhận được kết quả thực sự

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4

Điều này có thể trông hơi lạ. Điều đầu tiên bạn nên biết là,

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
22 có một số tham số bổ sung. Đầu tiên là, có bao nhiêu hàng [
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
23] sẽ được trả lại. Theo mặc định, nó trả về một hàng. Nó có thể trả lại ít hàng hơn bạn yêu cầu, nhưng không bao giờ nhiều hơn. Nếu bạn đặt
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
24, nó sẽ trả về tất cả các hàng của tập kết quả. Nếu bạn nhận được một bộ dữ liệu trống, bạn đã hết hàng

Tham số thứ hai [

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
25] cho nó biết cách biểu diễn hàng. Theo mặc định, nó bằng 0 có nghĩa là, trả về dưới dạng một bộ.
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
26 có nghĩa là, trả về dưới dạng từ điển, trong đó các khóa là tên cột hoặc
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
27 nếu có hai cột có cùng tên [giả sử từ một phép nối].
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
28 có nghĩa giống như
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
26 ngoại trừ các phím luôn là
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
27;

OK, vậy tại sao chúng ta lại lấy 1-Tuple với một Tuple bên trong?

Điều kỳ lạ khác là. Giả sử đây là các cột số, tại sao chúng được trả về dưới dạng chuỗi? . Điều này thực sự rất khó chịu, nhưng trên thực tế,

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
6 có thể làm điều này cho bạn. [Và
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
34 làm điều này cho bạn. ] Để thực hiện chuyển đổi loại tự động, bạn cần tạo một từ điển chuyển đổi loại và chuyển từ này cho
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
11 dưới dạng tham số từ khóa
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
36

Các khóa của

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
36 phải là các loại cột MySQL, trong API C là
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
05. Bạn có thể nhận được những giá trị như thế này

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
4

Theo mặc định, bất kỳ loại cột nào không thể tìm thấy trong

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
36 đều được trả về dưới dạng chuỗi, phù hợp với nhiều nội dung. Đối với mục đích của chúng tôi, chúng tôi có thể muốn điều này

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
0

Điều này có nghĩa là, nếu đó là một

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
40, hãy gọi hàm dựng sẵn
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
41 trên đó. Lưu ý rằng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
40 là cột
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
43, tương ứng với C
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
44, đây cũng là loại được sử dụng cho số nguyên Python thông thường. Nhưng hãy cẩn thận. Nếu nó thực sự là một cột
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
45, điều này có thể gây tràn. Vì lý do này,
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
34 thực sự sử dụng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
47 để thực hiện chuyển đổi. Nhưng bây giờ chúng ta sẽ bỏ qua vấn đề tiềm ẩn này

Sau đó, nếu bạn sử dụng

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
48, kết quả sẽ trả về
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
49, đó là điều bạn mong đợi

MySQLdb

MySQLdb là một trình bao bọc Python mỏng xung quanh

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
3 giúp nó tương thích với giao diện API Python DB [phiên bản 2]. Trên thực tế, một số lượng khá lớn mã triển khai API nằm trong
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
3 vì mục đích hiệu quả

Đặc tả API DB PEP-249 sẽ là hướng dẫn chính của bạn để sử dụng mô-đun này. Chỉ những sai lệch so với thông số kỹ thuật và những thứ phụ thuộc vào cơ sở dữ liệu khác sẽ được ghi lại ở đây

Chức năng và thuộc tính

Chỉ một vài chức năng và thuộc tính cấp cao nhất được xác định trong MySQLdb

kết nối [tham số. ]

Constructor để tạo kết nối đến cơ sở dữ liệu. Trả về một đối tượng kết nối. Các tham số giống như đối với MySQL C API. Ngoài ra, có một vài từ khóa bổ sung tương ứng với những gì bạn sẽ vượt qua

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
44 trước khi kết nối. Lưu ý rằng một số tham số phải được chỉ định làm đối số từ khóa. Giá trị mặc định cho mỗi tham số là NULL hoặc 0, nếu phù hợp. Tham khảo tài liệu MySQL để biết thêm chi tiết. Các thông số quan trọng là

tên máy chủ của máy chủ để kết nối với. Mặc định. sử dụng máy chủ lưu trữ cục bộ thông qua ổ cắm UNIX [nếu có] người dùng để xác thực là. Mặc định. người dùng hiệu quả hiện tại. mật khẩu mật khẩu để xác thực với. Mặc định. không mật khẩu. cơ sở dữ liệu cơ sở dữ liệu để sử dụng. Mặc định. không có cơ sở dữ liệu mặc định. portTCP port của máy chủ MySQL. Mặc định. cổng tiêu chuẩn [3306]. unix_socketlocation của ổ cắm UNIX. Mặc định. sử dụng vị trí mặc định hoặc TCP cho máy chủ từ xa. từ điển chuyển đổi convtype. Mặc định. một bản sao của nén giao thức
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
53compressEnable. Mặc định. không nén. connect_timeoutAbort nếu kết nối không hoàn thành trong số giây nhất định. Mặc định. không có thời gian chờ [?]named_pipeSử dụng đường ống có tên [Windows]. Mặc định. đừng. init_commandLệnh ban đầu để cấp cho máy chủ khi kết nối. Mặc định. Không. read_default_filetệp cấu hình MySQL để đọc; . read_default_groupNhóm mặc định để đọc; . lớp con trỏ mà
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
56 sử dụng, trừ khi bị ghi đè. Mặc định.
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
57. Đây phải là một tham số từ khóa. sử dụng_unicode

Nếu các cột True, CHAR và VARCHAR và TEXT được trả về dưới dạng chuỗi Unicode, sử dụng bộ ký tự đã định cấu hình. Tốt nhất là đặt mã hóa mặc định trong cấu hình máy chủ hoặc cấu hình máy khách [đọc bằng read_default_file]. Nếu bạn thay đổi bộ ký tự sau khi kết nối [MySQL-4. 1 trở lên], bạn sẽ cần đặt tên bộ ký tự chính xác trong kết nối. bộ ký tự

Nếu Sai, các cột giống như văn bản được trả về dưới dạng chuỗi bình thường, nhưng bạn luôn có thể viết chuỗi Unicode

Đây phải là một tham số từ khóa

bộ ký tự

Nếu có, bộ ký tự kết nối sẽ được thay đổi thành bộ ký tự này, nếu chúng không bằng nhau. Hỗ trợ thay đổi bộ ký tự yêu cầu MySQL-4. máy chủ 1 trở lên; . Tùy chọn này ngụ ý use_unicode=True, nhưng bạn có thể ghi đè tùy chọn này bằng use_unicode=False, mặc dù có thể bạn không nên

Nếu không có, bộ ký tự mặc định được sử dụng

Đây phải là một tham số từ khóa

sql_mode

Nếu có, chế độ phiên SQL sẽ được đặt thành chuỗi đã cho. Để biết thêm thông tin về sql_mode, hãy xem tài liệu về MySQL. Chỉ có sẵn cho 4. 1 và các máy chủ mới hơn

Nếu không có, chế độ phiên SQL sẽ không thay đổi

Đây phải là một tham số từ khóa

ssl_mode

Nếu có, hãy chỉ định cài đặt bảo mật cho kết nối với máy chủ. Để biết thêm thông tin về ssl_mode, hãy xem tài liệu về MySQL. Chỉ có thể chỉ định một trong số 'DISABLED', 'PREFERRED', 'REQUIRED', 'VERIFY_CA', 'VERIFY_IDENTITY'

Nếu không có, phiên ssl_mode sẽ không thay đổi, nhưng trong phiên bản 5. 7 trở lên, mặc định là ƯU TIÊN

Đây phải là một tham số từ khóa

sslTham số này lấy từ điển hoặc ánh xạ, trong đó các khóa là tên tham số được sử dụng bởi lệnh gọi API mysql_ssl_set MySQL C. Nếu điều này được đặt, nó sẽ khởi tạo kết nối SSL đến máy chủ; . Đây phải là một tham số từ khóa. hằng số apilevelString cho biết mức API DB được hỗ trợ. '2. 0'an toàn luồng

Hằng số nguyên cho biết mức độ an toàn của luồng mà giao diện hỗ trợ. Điều này được đặt thành 1, có nghĩa là. Chủ đề có thể chia sẻ mô-đun

Giao thức MySQL không thể xử lý nhiều luồng sử dụng cùng một kết nối cùng một lúc. Một số phiên bản trước của MySQLdb đã sử dụng khóa để đạt được độ an toàn luồng là 2. Mặc dù điều này không quá khó để thực hiện khi sử dụng lớp Con trỏ tiêu chuẩn [sử dụng

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
41], nhưng nó lại phức tạp bởi SSCursor [sử dụng
db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
45; với lớp sau, bạn phải đảm bảo tất cả các hàng đã được đọc trước khi có thể thực hiện một truy vấn khác. Nó phức tạp hơn khi bổ sung các giao dịch, vì các giao dịch bắt đầu khi một con trỏ thực hiện một truy vấn, nhưng kết thúc khi
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
60 hoặc
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
61 được thực thi bởi đối tượng Kết nối. Hai luồng đơn giản là không thể chia sẻ kết nối trong khi giao dịch đang diễn ra, ngoài việc không thể chia sẻ nó trong khi thực hiện truy vấn. Mã này quá phức tạp đến mức không đáng

Kết quả chung của việc này là. Không chia sẻ kết nối giữa các chủ đề. Nó thực sự không xứng đáng với nỗ lực của bạn hoặc của tôi, và cuối cùng, có thể sẽ ảnh hưởng đến hiệu suất, vì máy chủ MySQL chạy một luồng riêng cho mỗi kết nối. Bạn chắc chắn có thể thực hiện những việc như kết nối bộ đệm trong nhóm và cung cấp các kết nối đó cho một luồng tại một thời điểm. Nếu bạn để hai luồng sử dụng kết nối đồng thời, thư viện máy khách MySQL có thể sẽ bị lỗi và chết. Bạn đã được cảnh báo

bộ ký tự Bộ ký tự được sử dụng bởi kết nối. Trong MySQL-4. 1 trở lên, có thể [nhưng không khuyến nghị] thay đổi bộ ký tự của kết nối bằng câu lệnh SQL. Nếu bạn làm điều này, bạn cũng cần phải thay đổi thuộc tính này. Nếu không, bạn sẽ gặp lỗi mã hóa. kiểu mẫu

Hằng số chuỗi cho biết loại định dạng đánh dấu tham số mà giao diện mong đợi. Đặt thành 'định dạng' = ANSI C mã định dạng printf, e. g. '. Tên Ở ĐÂU=%s'. Nếu một đối tượng ánh xạ được sử dụng để kết nối. exec[], thì giao diện thực sự sử dụng mã định dạng mở rộng 'pyformat' = Python, e. g. '. WHERE name=%[name]s'. Tuy nhiên, API hiện không cho phép đặc tả nhiều hơn một kiểu trong paramstyle

Lưu ý rằng bất kỳ ký hiệu phần trăm bằng chữ nào trong chuỗi truy vấn được chuyển đến hàm exec[] đều phải được thoát, i. e. %%

Trình giữ chỗ tham số chỉ có thể được sử dụng để chèn giá trị cột. Chúng không thể được sử dụng cho các phần khác của SQL, chẳng hạn như tên bảng, câu lệnh, v.v.

chuyển đổi

Từ điển hoặc ánh xạ kiểm soát cách các loại được chuyển đổi từ MySQL sang Python và ngược lại

Nếu khóa là loại MySQL [từ

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
62], thì giá trị có thể là

  • một đối tượng có thể gọi được nhận một đối số chuỗi [giá trị MySQL], trả về giá trị Python
  • một chuỗi gồm 2 bộ, trong đó giá trị đầu tiên là sự kết hợp của các cờ từ
    db=_mysql.connect["localhost","joebob","moonpie","thangs"]
    
    63 và giá trị thứ hai là một hàm như trên. Trình tự được kiểm tra cho đến khi các cờ trên trường khớp với cờ của giá trị đầu tiên. Nếu cả hai giá trị là Không, thì chuyển đổi mặc định được thực hiện. Hiện tại, điều này chỉ được sử dụng để phân biệt các cột TEXT và BLOB

Nếu khóa là một loại hoặc lớp Python, thì giá trị là một đối tượng Python có thể gọi được [thường là một hàm] nhận hai đối số [giá trị để chuyển đổi và từ điển chuyển đổi] chuyển đổi các giá trị của loại này thành giá trị chuỗi ký tự SQL

Điều này được khởi tạo với giá trị mặc định hợp lý cho hầu hết các loại. Khi tạo đối tượng Kết nối, bạn có thể chuyển từ điển trình chuyển đổi kiểu của riêng mình làm tham số từ khóa. Mặt khác, nó sử dụng một bản sao của

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
53. Một số loại không chuẩn được trả về dưới dạng chuỗi, đó là cách MySQL trả về tất cả các cột. Để biết thêm chi tiết, hãy xem tài liệu mô-đun tích hợp

Đối tượng kết nối

Các đối tượng kết nối được trả về bởi hàm

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
11

cam kết [] Nếu cơ sở dữ liệu và các bảng hỗ trợ các giao dịch, điều này sẽ cam kết giao dịch hiện tại; . rollback[]Nếu cơ sở dữ liệu và bảng hỗ trợ các giao dịch, thao tác này sẽ khôi phục [hủy bỏ] giao dịch hiện tại; . con trỏ[[cursorclass]]MySQL không hỗ trợ con trỏ; . Bạn có thể cung cấp một lớp con trỏ thay thế như một tham số tùy chọn. Nếu điều này không xuất hiện, nó sẽ mặc định là giá trị được cung cấp khi tạo đối tượng kết nối hoặc lớp
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
67 tiêu chuẩn. Ngoài ra, hãy xem các lớp con trỏ được cung cấp bổ sung trong phần sử dụng

Có nhiều phương thức khác được định nghĩa trên đối tượng kết nối dành riêng cho MySQL. Để biết thêm thông tin về chúng, hãy tham khảo tài liệu nội bộ bằng cách sử dụng

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
68

đối tượng con trỏ

callproc[procname, args]

Gọi thủ tục lưu trữ procname với chuỗi đối số trong args. Trả về các đối số ban đầu. Hỗ trợ thủ tục được lưu trữ chỉ hoạt động với MySQL-5. 0 và mới hơn

lưu ý tương thích. PEP-249 chỉ định rằng nếu có các tham số OUT hoặc INOUT, các giá trị đã sửa đổi sẽ được trả về. Điều này không thể nhất quán với MySQL. Các đối số thủ tục được lưu trữ phải được chuyển dưới dạng biến máy chủ và chỉ có thể được trả về bằng câu lệnh CHỌN. Vì một thủ tục được lưu trữ có thể trả về 0 hoặc nhiều tập kết quả, nên MySQLdb không thể xác định xem có tập kết quả nào để tìm nạp trước khi có thể truy cập các tham số đã sửa đổi hay không

Các tham số được lưu trữ trong máy chủ dưới dạng @_*procname*_*n*, trong đó n là vị trí của tham số. Tôi. e. , nếu bạn trỏ chuột. callproc['foo', [a, b, c]], các tham số sẽ có thể truy cập được bằng câu lệnh SELECT như @_foo_0, @_foo_1 và @_foo_2

lưu ý tương thích. Có vẻ như hành động thực thi câu lệnh CALL đơn thuần tạo ra một tập kết quả trống, xuất hiện sau bất kỳ tập kết quả nào có thể được tạo bởi thủ tục được lưu trữ. Do đó, bạn sẽ luôn cần sử dụng nextset[] để nâng cao tập kết quả

close[] Đóng con trỏ. Các hoạt động trong tương lai tăng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
69. Nếu bạn đang sử dụng con trỏ phía máy chủ, điều rất quan trọng là phải đóng con trỏ khi bạn hoàn thành và trước khi tạo con trỏ mới. info[] Trả về một số thông tin về truy vấn cuối cùng. Thông thường bạn không cần phải kiểm tra điều này. Nếu có bất kỳ cảnh báo MySQL nào, nó sẽ đưa ra Cảnh báo thông qua mô-đun cảnh báo Python. Theo mặc định, Cảnh báo khiến thông báo xuất hiện trên bảng điều khiển. Tuy nhiên, có thể lọc những thứ này ra hoặc khiến Cảnh báo được đưa ra dưới dạng ngoại lệ. Xem tài liệu MySQL cho
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
46 và mô-đun cảnh báo Python. [Không chuẩn]setinputsizes[] Không làm gì, thành công. setoutputsizes[] Không làm gì cả, thành công. tập tiếp theo[]

Di chuyển con trỏ đến tập kết quả tiếp theo, loại bỏ các hàng còn lại trong tập kết quả hiện tại. Nếu không có tập kết quả bổ sung nào, nó sẽ trả về Không có;

Lưu ý rằng MySQL không hỗ trợ nhiều bộ kết quả cho đến 4. 1

Vài ví dụ

Phương thức

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
11 hoạt động gần giống như với MySQLDB. _mysql

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
1

Để thực hiện một truy vấn, trước tiên bạn cần có một con trỏ, sau đó bạn có thể thực hiện các truy vấn trên đó

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
2

Trong ví dụ này,

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
72 Vậy tại sao lại sử dụng
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
73 trong chuỗi? . Khi nó kết thúc, truy vấn sẽ thực sự nói, ". ĐÂU giá < 5"

Tại sao bộ dữ liệu? . Do thiết kế của trình phân tích cú pháp, [max_price] được hiểu là sử dụng nhóm đại số và đơn giản là max_price chứ không phải bộ. Thêm dấu phẩy, tôi. e. [max_price,] buộc nó tạo một Tuple

Và bây giờ, kết quả

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
3

Khác với ví dụ về

db=_mysql.connect[host="localhost",user="joebob",
                  password="moonpie",database="thangs"]
3, điều này trả về một bộ duy nhất, đó là hàng và các giá trị được chuyển đổi đúng theo mặc định. ngoại trừ. Có chuyện gì với chữ L vậy?

Như đã đề cập trước đó, trong khi cột INTEGER của MySQL dịch hoàn hảo thành số nguyên Python, thì UNSIGNED INTEGER có thể tràn, do đó, các giá trị này được chuyển đổi thành số nguyên dài Python thay thế

Nếu bạn muốn có nhiều hàng hơn, bạn có thể sử dụng

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
75 hoặc
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
76. Những điều này làm chính xác những gì bạn nghĩ rằng họ làm. Trên
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
75,
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
78 là tùy chọn và mặc định là
db=_mysql.connect["localhost","joebob","moonpie","thangs"]
79, thường là 1. Cả hai phương thức này đều trả về một chuỗi các hàng hoặc một chuỗi trống nếu không còn hàng nào nữa. Nếu bạn sử dụng một lớp con trỏ lạ, bản thân các hàng có thể không phải là bộ

Lưu ý rằng trái ngược với điều trên, ________ 080 trả về ________ 081 khi không còn hàng nào để tìm nạp

Phương pháp duy nhất khác mà bạn rất có thể sử dụng là khi bạn phải thực hiện thao tác chèn nhiều hàng

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
4

Ở đây chúng tôi đang chèn ba hàng năm giá trị. Lưu ý rằng có sự kết hợp của các loại [chuỗi, int, float] mặc dù chúng tôi vẫn chỉ sử dụng

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
73. Và cũng lưu ý rằng chúng tôi chỉ bao gồm các chuỗi định dạng cho một hàng. MySQLdb chọn chúng ra và sao chép chúng cho mỗi hàng

Sử dụng và mở rộng

Nói chung, có lẽ nên khôn ngoan khi không tương tác trực tiếp với API DB ngoại trừ các ứng dụng nhỏ. Cơ sở dữ liệu, ngay cả cơ sở dữ liệu SQL, rất khác nhau về khả năng và có thể có các tính năng không chuẩn. API DB thực hiện tốt công việc cung cấp giao diện di động hợp lý nhưng một số phương thức không di động. Cụ thể, các tham số được chấp nhận bởi

db=_mysql.connect["localhost","joebob","moonpie","thangs"]
11 hoàn toàn phụ thuộc vào việc triển khai

Nếu bạn cho rằng ứng dụng của mình có thể cần chạy trên nhiều cơ sở dữ liệu khác nhau, tác giả đề xuất cách tiếp cận sau, dựa trên kinh nghiệm cá nhân. Viết một API đơn giản hóa cho ứng dụng của bạn để thực hiện các truy vấn và hoạt động cụ thể mà ứng dụng của bạn cần thực hiện. Triển khai API này dưới dạng một lớp cơ sở cần có ít phụ thuộc cơ sở dữ liệu, sau đó lấy một lớp con từ lớp này để thực hiện các phụ thuộc cần thiết. Theo cách này, việc chuyển ứng dụng của bạn sang cơ sở dữ liệu mới sẽ là một vấn đề tương đối đơn giản để tạo một lớp con mới, giả sử cơ sở dữ liệu mới là tiêu chuẩn hợp lý

Vì các đối tượng Con trỏ và Kết nối của MySQLdb được viết bằng Python, nên bạn có thể dễ dàng lấy được các lớp con của riêng mình. Có một số lớp Con trỏ trong MySQLdb. con trỏ

Chủ Đề