Hướng dẫn what is mysqldb module in python? - mô-đun mysqldb trong python là gì?

Mysqldb

Giới thiệu¶

MySQLDB là giao diện của máy chủ cơ sở dữ liệu MySQL phổ biến cung cấp API cơ sở dữ liệu Python.

Cài đặt¶

Tệp

db=_mysql.connect("localhost","joebob","moonpie","thangs")
5 có hướng dẫn cài đặt đầy đủ.

Mysqldb._mysql¶

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

db=_mysql.connect("localhost","joebob","moonpie","thangs")
6 cung cấp một giao diện chủ yếu thực hiện API MySQL C. Để biết thêm thông tin, hãy xem tài liệu MySQL. Tài liệu cho mô-đun này có chủ ý yếu vì bạn có thể 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à phiên âm khi cần thiết.

MySQL C API Dịch

API MySQL C đã được bọc theo một 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à các loại
db=_mysql.connect("localhost","joebob","moonpie","thangs")
8 (xử lý kết quả). Nói chung, bất kỳ chức năng nào lấy
db=_mysql.connect("localhost","joebob","moonpie","thangs")
9 làm đối số hiện 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",
                  passwd="moonpie",db="thangs")
0 làm đối số là một phương thức của đối tượng kết quả. Các chức năng yêu cầu không có cấu trúc dữ liệu MySQL nào được triển khai dưới dạng các hàm 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 thực hiện. Trong mọi trường hợp, tiền tố
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
1 bị loại khỏi tên. Hầu hết các phương thức
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="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 của họ là không khả thi.

Bản đồ chức năng API MySQL C

C API
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
3
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
4
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
5
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
6
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
7
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
8
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
9
db=_mysql.connect(passwd="moonpie",db="thangs")
0
db=_mysql.connect(passwd="moonpie",db="thangs")
1
db=_mysql.connect(passwd="moonpie",db="thangs")
2
db=_mysql.connect(passwd="moonpie",db="thangs")
3
db=_mysql.connect(passwd="moonpie",db="thangs")
4
db=_mysql.connect(passwd="moonpie",db="thangs")
5
db=_mysql.connect(passwd="moonpie",db="thangs")
6
db=_mysql.connect(passwd="moonpie",db="thangs")
7
db=_mysql.connect(passwd="moonpie",db="thangs")
8
db=_mysql.connect(passwd="moonpie",db="thangs")
9
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
0
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
1
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
2
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
3
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
4
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
5
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
6
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
7
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
8
db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")
9
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
0
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
1
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
2
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
3
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
4
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
5
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
6
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
7
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
8
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
9
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
0
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
1
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
2
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
3
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
4
Các tùy chọn khác nhau cho
db=_mysql.connect(passwd="moonpie",db="thangs")
5
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
6
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
7
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
8
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
9
r=db.store_result()
# ...or...
r=db.use_result()
0
db=_mysql.connect(passwd="moonpie",db="thangs")
5
db=_mysql.connect(passwd="moonpie",db="thangs")
6
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
9
r=db.store_result()
# ...or...
r=db.use_result()
0
r=db.store_result()
# ...or...
r=db.use_result()
2
r=db.store_result()
# ...or...
r=db.use_result()
4
r=db.store_result()
# ...or...
r=db.use_result()
5
r=db.store_result()
# ...or...
r=db.use_result()
6
r=db.store_result()
# ...or...
r=db.use_result()
7
r=db.store_result()
# ...or...
r=db.use_result()
8
r=db.store_result()
# ...or...
r=db.use_result()
9
>>> r.fetch_row()
(('3','2','0'),)
0
>>> r.fetch_row()
(('3','2','0'),)
1
>>> r.fetch_row()
(('3','2','0'),)
2
>>> r.fetch_row()
(('3','2','0'),)
3
>>> r.fetch_row()
(('3','2','0'),)
4
>>> r.fetch_row()
(('3','2','0'),)
5
>>> r.fetch_row()
(('3','2','0'),)
6
Tùy chọn
>>> r.fetch_row()
(('3','2','0'),)
7 cho
db=_mysql.connect(passwd="moonpie",db="thangs")
5
>>> r.fetch_row()
(('3','2','0'),)
9
from MySQLdb.constants import FIELD_TYPE
0
from MySQLdb.constants import FIELD_TYPE
1
from MySQLdb.constants import FIELD_TYPE
2
from MySQLdb.constants import FIELD_TYPE
3
from MySQLdb.constants import FIELD_TYPE
4
from MySQLdb.constants import FIELD_TYPE
5
from MySQLdb.constants import FIELD_TYPE
6
from MySQLdb.constants import FIELD_TYPE
7
from MySQLdb.constants import FIELD_TYPE
8
from MySQLdb.constants import FIELD_TYPE
9
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

from MySQLdb import _mysql
db=_mysql.connect()

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

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

db=_mysql.connect("localhost","joebob","moonpie","thangs")

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

Điều này tạo ra kết nối với máy chủ MySQL đang chạy trên máy cục bộ bằng ổ cắm unix tiêu chuẩn (hoặc đường ống được đặt tên trên Windows), tên đăng nhập của bạn (từ biến môi trường người dùng), không mật khẩu và không

db=_mysql.connect("localhost","joebob","moonpie","thangs")
10 cơ sở dữ liệu. Rất có thể bạn cần cung cấp thêm thông tin .:

db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")

Điều này tạo ra một kết nối với máy chủ MySQL đang chạy trên máy cục bộ thông qua ổ cắm UNIX (hoặc đường ống được đặt tên), tên người dùng là Jo Joebob, mật khẩu Moon Moonpie, và chọn cơ sở dữ liệu ban đầu.

db=_mysql.connect(passwd="moonpie",db="thangs")

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

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 các tham số từ khóa:

db=_mysql.connect(host="outhouse",port=3307,passwd="moonpie",db="thangs")

Điều này làm chính xác những gì ví dụ cuối cùng đã làm, nhưng được cho là dễ đọc hơn. Nhưng vì máy chủ mặc định là trên localhost, và nếu tên đăng nhập của bạn thực sự là thì Jo Joebob, bạn có thể rút ngắn nó thành vấn đề này:

Unix ổ cắm và đường ống được đặt tên don don hoạt động qua mạng, vì vậy nếu bạn chỉ định một máy chủ khác ngoài localhost, TCP sẽ được sử dụng và bạn có thể chỉ định một cổng lẻ nếu bạn cần (cổng mặc định là 3306):

db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")

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

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

db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")

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

At this point your query has been executed and you need to get the results. You have two options:

r=db.store_result()
# ...or...
r=db.use_result()

Both methods return a result object. What’s the difference?

db=_mysql.connect("localhost","joebob","moonpie","thangs")
17 returns the entire result set to the client immediately. If your result set is really large, this could be a problem. One way around this is to add a
db=_mysql.connect("localhost","joebob","moonpie","thangs")
18 clause to your query, to limit the number of rows returned. The other is to use
db=_mysql.connect("localhost","joebob","moonpie","thangs")
19, which keeps the result set in the server and sends it row-by-row when you fetch. This does, however, tie up server resources, and it ties up the connection: You cannot do any more queries until you have fetched all the rows. Generally I recommend using
db=_mysql.connect("localhost","joebob","moonpie","thangs")
17 unless your result set is really huge and you can’t use
db=_mysql.connect("localhost","joebob","moonpie","thangs")
18 for some reason.

Now, for actually getting real results:

>>> r.fetch_row()
(('3','2','0'),)

This might look a little odd. The first thing you should know is,

db=_mysql.connect("localhost","joebob","moonpie","thangs")
22 takes some additional parameters. The first one is, how many rows (
db=_mysql.connect("localhost","joebob","moonpie","thangs")
23) should be returned. By default, it returns one row. It may return fewer rows than you asked for, but never more. If you set
db=_mysql.connect("localhost","joebob","moonpie","thangs")
24, it returns all rows of the result set. If you ever get an empty tuple back, you ran out of rows.

The second parameter (

db=_mysql.connect("localhost","joebob","moonpie","thangs")
25) tells it how the row should be represented. By default, it is zero which means, return as a tuple.
db=_mysql.connect("localhost","joebob","moonpie","thangs")
26 means, return it as a dictionary, where the keys are the column names, or
db=_mysql.connect("localhost","joebob","moonpie","thangs")
27 if there are two columns with the same name (say, from a join).
db=_mysql.connect("localhost","joebob","moonpie","thangs")
28 means the same as
db=_mysql.connect("localhost","joebob","moonpie","thangs")
26 except that the keys are always
db=_mysql.connect("localhost","joebob","moonpie","thangs")
27; this is for compatibility with the old
db=_mysql.connect("localhost","joebob","moonpie","thangs")
31 module.

OK, so why did we get a 1-tuple with a tuple inside? Because we implicitly asked for one row, since we didn’t specify

db=_mysql.connect("localhost","joebob","moonpie","thangs")
23.

The other oddity is: Assuming these are numeric columns, why are they returned as strings? Because MySQL returns all data as strings and expects you to convert it yourself. This would be a real pain in the ass, but in fact,

db=_mysql.connect("localhost","joebob","moonpie","thangs")
6 can do this for you. (And
db=_mysql.connect("localhost","joebob","moonpie","thangs")
34 does do this for you.) To have automatic type conversion done, you need to create a type converter dictionary, and pass this to
db=_mysql.connect("localhost","joebob","moonpie","thangs")
11 as the
db=_mysql.connect("localhost","joebob","moonpie","thangs")
36 keyword parameter.

The keys of

db=_mysql.connect("localhost","joebob","moonpie","thangs")
36 should be MySQL column types, which in the C API are
db=_mysql.connect("localhost","joebob","moonpie","thangs")
05. You can get these values like this:

from MySQLdb.constants import FIELD_TYPE

By default, any column type that can’t be found in

db=_mysql.connect("localhost","joebob","moonpie","thangs")
36 is returned as a string, which works for a lot of stuff. For our purposes, we probably want this:

db=_mysql.connect("localhost","joebob","moonpie","thangs")
0

This means, if it’s a

db=_mysql.connect("localhost","joebob","moonpie","thangs")
40, call the builtin
db=_mysql.connect("localhost","joebob","moonpie","thangs")
41 function on it. Note that
db=_mysql.connect("localhost","joebob","moonpie","thangs")
40 is an
db=_mysql.connect("localhost","joebob","moonpie","thangs")
43 column, which corresponds to a C
db=_mysql.connect("localhost","joebob","moonpie","thangs")
44, which is also the type used for a normal Python integer. But beware: If it’s really an
db=_mysql.connect("localhost","joebob","moonpie","thangs")
45 column, this could cause overflows. For this reason,
db=_mysql.connect("localhost","joebob","moonpie","thangs")
34 actually uses
db=_mysql.connect("localhost","joebob","moonpie","thangs")
47 to do the conversion. But we’ll ignore this potential problem for now.

Then if you use

db=_mysql.connect("localhost","joebob","moonpie","thangs")
48, the results will come back
db=_mysql.connect("localhost","joebob","moonpie","thangs")
49, which is what you would expect.

MySQLdb¶

MySQLdb is a thin Python wrapper around

db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
3 which makes it compatible with the Python DB API interface (version 2). In reality, a fair amount of the code which implements the API is in
db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
3 for the sake of efficiency.

The DB API specification PEP-249 should be your primary guide for using this module. Only deviations from the spec and other database-dependent things will be documented here.

Functions and attributes¶

Only a few top-level functions and attributes are defined within MySQLdb.

connect(parameters…)

Constructor for creating a connection to the database. Returns a Connection Object. Parameters are the same as for the MySQL C API. In addition, there are a few additional keywords that correspond to what you would pass

db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
4 before connecting. Note that some parameters must be specified as keyword arguments! The default value for each parameter is NULL or zero, as appropriate. Consult the MySQL documentation for more details. The important parameters are:

hostname of host to connect to. Default: use the local host via a UNIX socket (where applicable)useruser to authenticate as. Default: current effective user.passwdpassword to authenticate with. Default: no password.dbdatabase to use. Default: no default database.portTCP port of MySQL server. Default: standard port (3306).unix_socketlocation of UNIX socket. Default: use default location or TCP for remote hosts.convtype conversion dictionary. Default: a copy of
db=_mysql.connect("localhost","joebob","moonpie","thangs")
53compressEnable protocol compression. Default: no compression.connect_timeoutAbort if connect is not completed within given number of seconds. Default: no timeout (?)named_pipeUse a named pipe (Windows). Default: don’t.init_commandInitial command to issue to server upon connection. Default: Nothing.read_default_fileMySQL configuration file to read; see the MySQL documentation for
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
4.read_default_groupDefault group to read; see the MySQL documentation for
db.query("""SELECT spam, eggs, sausage FROM breakfast
         WHERE price < 5""")
4.cursorclasscursor class that
db=_mysql.connect("localhost","joebob","moonpie","thangs")
56 uses, unless overridden. Default:
db=_mysql.connect("localhost","joebob","moonpie","thangs")
57. This must be a keyword parameter.use_unicode

Nếu đúng, các cột char và varchar và văn bản được trả về dưới dạng chuỗi unicode, sử dụng bộ ký tự được đị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 vào Connection.charset.

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.

Charset

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 máy chủ MySQL-4.1 và sau đó; Nếu máy chủ quá cũ, UnsportededError sẽ được nâng lên. Tùy chọn này ngụ ý use_unicode = true, nhưng bạn có thể ghi đè lên điều này bằng uses_unicode = false, mặc dù bạn có thể 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.

Charset

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 máy chủ MySQL-4.1 và sau đó; Nếu máy chủ quá cũ, UnsportededError sẽ được nâng lên. Tùy chọn này ngụ ý use_unicode = true, nhưng bạn có thể ghi đè lên điều này bằng uses_unicode = false, mặc dù bạn có thể 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.

Charset

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 máy chủ MySQL-4.1 và sau đó; Nếu máy chủ quá cũ, UnsportededError sẽ được nâng lên. Tùy chọn này ngụ ý use_unicode = true, nhưng bạn có thể ghi đè lên điều này bằng uses_unicode = false, mặc dù bạn có thể không nên.

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

SQL_Mode

Nếu có, chế độ SQL phiên 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 MySQL. Chỉ có sẵn cho 4.1 và máy chủ mới hơn.

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

Tham số SSLthis lấy một từ điển hoặc ánh xạ, trong đó các khóa là tên tham số được sử dụng bởi cuộc gọi API MySQL_SSL_SET của MySQL C. Nếu điều này được đặt, nó sẽ bắt đầu kết nối SSL đến máy chủ; Nếu không có hỗ trợ SSL trong máy khách, một ngoại lệ sẽ được nâng lên. Đây phải là một tham số từ khóa. Hằng số APILEVELSTRING nêu rõ mức API DB được hỗ trợ. 2.0

Integer hằng số nêu rõ mức độ an toàn 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.only be used to insert column values. They can not be used for other parts of SQL, such as table names, statements, etc.

Giao thức MySQL không thể xử lý nhiều luồng bằ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 chủ đề là 2. Mặc dù điều này không khó để thực hiện bằng cách sử dụng lớp con trỏ tiêu chuẩn (sử dụng
from MySQLdb.constants import FIELD_TYPE
1), nhưng nó rất phức tạp Các hàng đã được đọc trước khi một truy vấn khác có thể được thực thi. Nó 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 con trỏ thực hiện 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 chỉ đơn giản là chia sẻ Một kết nối trong khi một giao dịch đang được tiến hành, ngoài việc không thể chia sẻ nó trong quá trình thực thi truy vấn. Điều này quá phức tạp mã đến điểm mà nó không đáng giá.

Kết quả chung của điều này là: don lồng chia sẻ kết nối giữa các chủ đề. Nó thực sự không đáng để bạn nỗ lực hoặc của tôi, và cuối cùng, có thể sẽ làm tổn thương 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ể làm những việc như kết nối bộ nhớ cache trong một nhóm và cung cấp các kết nối đó đến 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ẽ tăng lên và chết. Bạn đã được cảnh báo.

Bộ ký tự được sử dụng bởi kết nối. Trong MySQL-4.1 và mới hơn, có thể (nhưng không được khuyến khích) để thay đổi bộ ký tự kết nối với câu lệnh SQL. Nếu bạn làm điều này, bạn cũng sẽ cần thay đổi thuộc tính này. Nếu không, bạn sẽ nhận được lỗi mã hóa.paramstyle

  • Chuỗi hằng số nêu rõ loại định dạng đánh dấu tham số được dự kiến ​​bởi giao diện. Đặt thành ‘Định dạng, = ANSI C Mã định dạng printf, ví dụ: ‘Nơi tên =%s. Nếu một đối tượng ánh xạ được sử dụng cho Conn.Execute (), thì giao diện thực sự sử dụng ‘pyformat, = mã định dạng mở rộng python, ví dụ: ‘Nơi tên =%(tên) s. Tuy nhiên, API hiện không cho phép đặc điểm kỹ thuật của nhiều hơn một phong cách theo tham số.
  • Lưu ý rằng bất kỳ dấu hiệu phần trăm theo nghĩa đen nào trong chuỗi truy vấn được truyền để thực thi () phải được thoát, tức là %%.

Nếu khóa là loại hoặc lớp Python, thì giá trị là đối tượng Python có thể gọi được (thường là hàm) lấy 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 theo nghĩa đen SQL.

Điều này được khởi tạo với mặc định hợp lý cho hầu hết các loại. Khi tạo một đối tượng kết nối, bạn có thể truyền từ điển chuyển đổi loại của riêng mình dưới dạng 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, 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 thực hiện giao dịch hiện tại; Mặt khác, phương thức này không làm gì thành công. nếu không, một
db=_mysql.connect("localhost","joebob","moonpie","thangs")
66 được nâng lên. Tuy nhiên, con trỏ dễ dàng được mô phỏng. 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 có mặt, nó mặc định là giá trị được đưa ra 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. Cũng 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 được xác định trên đối tượng kết nối là đặc trưng của 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)

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

Khả năng tương thích Lưu ý: PEP-249 chỉ định rằng nếu có các tham số OUT hoặc Inout, các giá trị được sửa đổi sẽ được trả về. Điều này không nhất quán có thể với MySQL. Các đối số thủ tục được lưu trữ phải được truyền dưới dạng các biến máy chủ và chỉ có thể được trả về với một câu lệnh CHỌN. Vì một quy trình được lưu trữ có thể trả về các bộ kết quả bằng 0 hoặc nhiều hơn, nên không thể xác định liệu có thể tìm thấy các bộ kết quả trước khi các parmeter được sửa đổi có thể truy cập được không. PEP-249 specifies that if there are OUT or INOUT parameters, the modified values are to be returned. This is not consistently possible with MySQL. Stored procedure arguments must be passed as server variables, and can only be returned with a SELECT statement. Since a stored procedure may return zero or more result sets, it is impossible for MySQLdb to determine if there are result sets to fetch before the modified parmeters are accessible.

Các tham số được lưu trữ trong máy chủ là @_*procname*_*n*, trong đó n là vị trí của tham số. Tức là, nếu bạn con trỏ.

Khả năng tương thích Lưu ý: Có vẻ như hành động thực thi câu lệnh CALL tạo ra một tập kết quả trống, xuất hiện sau bất kỳ bộ kết quả nào có thể được tạo bởi quy trình được lưu trữ. Do đó, bạn sẽ luôn cần sử dụng nextset () để nâng cấp các bộ kết quả. It appears that the mere act of executing the CALL statement produces an empty result set, which appears after any result sets which might be generated by the stored procedure. Thus, you will always need to use nextset() to advance result sets.

đóng () đóng con trỏ. 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 nó và trước khi tạo một.info () mới 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ẽ gây ra một cảnh báo được đưa ra thông qua mô -đun cảnh báo Python. Theo mặc định, cảnh báo làm cho một 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 điều này hoặc khiến cảnh báo được nêu ra là ngoại lệ. Xem tài liệu MySQL cho
db=_mysql.connect(host="outhouse",db="thangs",read_default_file="~/.my.cnf")
6 và mô -đun cảnh báo Python. (Không chuẩn) setInputSizes () không làm gì, thành công.

Tiến bộ con trỏ sang 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ó bộ kết quả bổ sung, nó không trả về không; Nếu không, nó trả về một giá trị thự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 `_Mysql`_:`_mysql`_:

db=_mysql.connect("localhost","joebob","moonpie","thangs")
1

Để thực hiện truy vấn, trước tiên bạn cần một con trỏ và sau đó bạn có thể thực thi 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 Tại sao, sau đó, sử dụng
db=_mysql.connect("localhost","joebob","moonpie","thangs")
73 trong chuỗi? Bởi vì MySQLDB sẽ chuyển đổi nó thành giá trị theo nghĩa đen SQL, đó là chuỗi ‘5. Khi nó kết thúc, truy vấn sẽ thực sự nói, ở đó, nơi giá <5.

Tại sao là tuple? Bởi vì API DB yêu cầu bạn vượt qua bất kỳ tham số nào dưới dạng chuỗi. 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 là một tuple. Thêm một dấu phẩy, tức là (max_price,) buộc nó phải tạo ra một tuple.

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

db=_mysql.connect("localhost","joebob","moonpie","thangs")
3

Không giống như ví dụ

db=_mysql.connect(host="localhost",user="joebob",
                  passwd="moonpie",db="thangs")
3, điều này trả về một tuple duy nhất, đó là hàng và các giá trị được chuyển đổi đúng cách theo mặc định, ngoại trừ những gì mà Lôi với L.

Như đã đề cập trước đó, trong khi cột số nguyên MySQL, chuyển hoàn hảo thành một số nguyên python, số nguyên không dấu có thể tràn, do đó, các giá trị này được chuyển đổi thành số nguyên của Python.

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ĩ 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 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ữa. Nếu bạn sử dụng một lớp con trỏ kỳ lạ, bản thân các hàng có thể không phải là bộ dữ liệu.

Lưu ý rằng trái ngược với những điều trên,

db=_mysql.connect("localhost","joebob","moonpie","thangs")
80 trả về
db=_mysql.connect("localhost","joebob","moonpie","thangs")
81 khi không có nhiều hàng để 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 một phần 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, phao) 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à nhân đôi chúng cho mỗi hàng.

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

Nói chung, có lẽ là 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, thậm chí cơ sở dữ liệu SQL, rất khác nhau về các 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 pháp là không thể thực hiện được. 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 thực hiện.

Nếu bạn tin rằng ứng dụng của bạn có thể cần chạy trên một số cơ sở dữ liệu khác nhau, tác giả khuyên bạn nên tiếp cận sau, dựa trên kinh nghiệm cá nhân: Viết API đơn giản hóa cho ứng dụng của bạn, trong đó 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. Thực hiện API này như một lớp cơ sở nên có một vài phụ thuộc cơ sở dữ liệu, và sau đó lấy một lớp con từ điều 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à vấn đề tương đối đơn giản là 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ý.

Bởi vì các đối tượng kết nối và con trỏ MySQLDB, được viết bằng Python, bạn có thể dễ dàng rút ra các lớp con của riêng mình. Có một số lớp con trỏ trong mysqldb.cursors:

Basecursorthe lớp cơ sở cho các đối tượng con trỏ. Điều này không nêu ra các cảnh báo. Toàn bộ tập kết quả được lưu trữ ở phía máy khách.cursoruseresultmixincauses con trỏ để sử dụng hàm
from MySQLdb.constants import FIELD_TYPE
5 để có kết quả truy vấn. Tập kết quả được lưu trữ ở phía máy chủ và được chuyển theo hàng bằng cách sử dụng các hoạt động tìm nạp và các giá trị là giá trị cột. Lưu ý rằng nếu tên cột không phải là duy nhất, tức là, bạn đang chọn từ hai bảng chia sẻ tên cột, một số trong số chúng sẽ được viết lại là
db=_mysql.connect("localhost","joebob","moonpie","thangs")
27. Điều này có thể tránh được bằng cách sử dụng từ khóa SQL
db=_mysql.connect("localhost","joebob","moonpie","thangs")
87. . Lớp này bao gồm
db=_mysql.connect("localhost","joebob","moonpie","thangs")
90,
db=_mysql.connect("localhost","joebob","moonpie","thangs")
91,
db=_mysql.connect("localhost","joebob","moonpie","thangs")
92 và
db=_mysql.connect("localhost","joebob","moonpie","thangs")
93, tức là nó tăng
db=_mysql.connect("localhost","joebob","moonpie","thangs")
94, sử dụng
from MySQLdb.constants import FIELD_TYPE
1 và trả về các hàng dưới dạng Tuples.DictCursor như
db=_mysql.connect("localhost","joebob","moonpie","thangs")
67 Giống như
db=_mysql.connect("localhost","joebob","moonpie","thangs")
67 nhưng sử dụng
db=_mysql.connect("localhost","joebob","moonpie","thangs")
98. Chỉ sử dụng nếu bạn đang xử lý các bộ kết quả có khả năng lớn.
Title:MySQLDB: Giao diện Python cho MySQL
Author:Andy Dustman
Version:$ Sửa đổi $

Làm cách nào để cài đặt mysqldb trong python?

Thực hiện theo các bước dưới đây để cài đặt Python MySQLDB trong Linux:..
Bước 1: Kiểm tra phiên bản Python.Kiểm tra xem Python có được cài đặt hay không trên hệ thống của bạn không.....
Bước 2: Cập nhật thông tin và sự phụ thuộc của chúng.....
Bước 3: Cài đặt mô -đun ..

Bình MySQLDB là gì?

Flask-Mysql là tiện ích mở rộng cho phép bạn truy cập cơ sở dữ liệu MySQL.a Flask extension that allows you to access a MySQL database.

Làm cách nào để kết nối với mysqldb?

Để kết nối với cơ sở dữ liệu MySQL mở rộng nút Trình điều khiển từ trình thám hiểm cơ sở dữ liệu.Nhấp chuột phải vào MySQL (Trình điều khiển đầu nối/J) và chọn Kết nối bằng cách sử dụng .... Hộp thoại Kết nối cơ sở dữ liệu mới được hiển thị.Trong tab Cài đặt cơ bản, nhập URL của cơ sở dữ liệu:/ trong trường văn bản tương ứng.Right-click the MySQL (Connector/J driver) and choose Connect Using.... The New Database Connection dialog box is displayed. In the Basic Setting tab, enter the Database's URL :/ in the corresponding text field.

Mô -đun kết nối MySQL trong Python là gì?

Trình kết nối MySQL/Python là trình điều khiển cơ sở dữ liệu được tiêu chuẩn hóa cho các nền tảng và phát triển Python.Ngoài ra, Trình kết nối MySQL/Python 8.0 hỗ trợ X Devapi mới để phát triển với MySQL Server 8.0.Tài liệu trực tuyến: Trình kết nối MySQL/Hướng dẫn cài đặt Python.Tài liệu.a standardized database driver for Python platforms and development. Additionally, MySQL Connector/Python 8.0 supports the new X DevAPI for development with MySQL Server 8.0. Online Documentation: MySQL Connector/Python Installation Instructions. Documentation.