- Home
- MySQL Connector/Python Tutorial
- Exception Handling in Connector/Python
Last updated on July 27, 2020
Error happens all the time when programming, so its better to equip yourself how to deal with them.
Errors and Warnings #
There are two levels of error message severity in MySQL.
- Error
- Warning
Error #
An Error indicates a problem with query or command which prevented it from being executed.
mysql> select * from earth; ERROR 1146 (42S02): Table 'world.earth' doesn't exist |
Warning #
Warning tells you some thing unexpected has happened that could cause problem down the line, but it is not severe enough to stop the statement from being executed. We can display warnings using SHOW WARNINGS;
command. For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
mysql> mysql> CREATE database if not exists world; Query OK, 1 row affected, 1 warning (0.00 sec) mysql> show warnings; +-------+------+------------------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------------------+ | Note | 1007 | Can't create database 'world'; database exists | +-------+------+------------------------------------------------+ 1 row in set (0.00 sec) mysql> mysql> mysql> SELECT 1/0; +------+ | 1/0 | +------+ | NULL | +------+ 1 row in set, 1 warning (0.12 sec) mysql> show warnings; +---------+------+---------------+ | Level | Code | Message | +---------+------+---------------+ | Warning | 1365 | Division by 0 | +---------+------+---------------+ 1 row in set (0.00 sec) mysql> |
Error Codes #
Errors and warnings in MySQL contains three pieces of information:
mysql> select * from earth; ERROR 1146 (42S02): Table 'world.earth' doesn't exist |
-
A unique MySQL specific error code (
1146
) that is not portable to other databases. -
A 5 character code (
42S02
) called SQLSTATE which is used to indicate success or failure of the operation. The SQLSTATE is portable across other databases. It consists of two parts: the first two character represents SQL error class and the next three represents subclass. Each class can belong to one of the following four categories.- Success (class 00)
- Warning (class 01)
- No Data (class 02)
- Exception (all the others 07-HZ)
-
A textual description of the error.
So why two error codes?
This is because SQLSTATE
represents a group of errors. As a result, we can only use it to handle generic errors. If you want to handle some specific error use MySQL-specific error code.
There are hundreds of MySQL-specific error codes. Fortunately, you don’t need to memorize them as the mysql.connector.errorcode
module contains all the MySQL-specific error codes.
>>> >>> from mysql.connector import errorcode >>> errorcode.ER_BAD_TABLE_ERROR 1051 >>> |
Exceptions Classes #
All the exception classes for dealing with error and warnings are defined in mysql.connector.errors
module.
The mysql.connector.errors.Error
is the base class for all the other exceptions. We can use it to catch any kind of exception.
Here is an example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import mysql.connector db = mysql.connector.connect(option_files='my.conf', use_pure=True) cursor = db.cursor() sql = """ CREATE TABLE `city` ( `ID` int(11) AUTO_INCREMENT PRIMARY KEY, `Name` char(35) NOT NULL DEFAULT '', `CountryCode` char(3) NOT NULL DEFAULT '' ) """ try: cursor.execute(sql) db.commit() except mysql.connector.Error as err: print(err) print("Error Code:", err.errno) print("SQLSTATE", err.sqlstate) print("Message", err.msg) cursor.close() db.close() |
Expected Output:
1050 (42S01): Table 'city' already exists Error Code: 1050 SQLSTATE 42S01 Message Table 'city' already exists |
When an exception is thrown you have access to error code, SQLSTATE and error message in the form of errno
, sqlstate
and msg
attributes of the exception object.
The mysql.connector.errors.Error
base class is further subclassed into the following three class:
DatabaseError
InterfaceError
PoolError
Let’s discuss them one by one.
-
DatabaseError
: This exception is raised for errors related to the database. It can catch a variety of errors like problem in data processing, error in SQL syntax, MySQL internal problems etc. If a connection is made and a problem arises thenDatabaseError
will catch it. There are 6 types ofDatabaseError
:DataError
InternalError
IntegrityError
OperationalError
NotSupportedError
ProgrammingError
DataError
: This error indicates a problem with the data processing, like division by zero, numeric value out of range, invalid type etc.InternalError
: This exception is raised when the database encounters an internal error. For e.g invalid cursor, transaction out of sync etc.IntegrityError
: This exception is raised when the foreign key constraint fails.OperationalError
: This exception is raised for things that are not in control of the programmer. For e.g unexpected disconnect, error in memory allocation etc, transaction failure, selected database not exists.NotSupportedError
: This exception is raised when you invoke method or api that is not supported. For example, callingrollback()
on a connection that doesn’t support the transaction.ProgrammingError
: This exception is raised of programming errors. For e.g table not found or already exists, error in MySQL syntax, wrong number of parameters specified, wrong connection credentials etc.
-
InterfaceError
: This exception is raised for errors related to the interface (in our case interface is MySQL Connector/Python) rather than the database itself. -
PoolError
: It is raised for errors related to connection pooling. We will learn about the connection pooling in the upcoming chapter.
The following figure shows the hierarchy of the exception classes:
StandardError |__ Error |__ InterfaceError |__ PoolError |__ DatabaseError |__ DataError |__ InternalError |__ IntegrityError |__ OperationalError |__ NotSupportedError |__ ProgrammingError |
All the exception classes are mapped to one or more SQLSTATE class, you can print this mapping by typing the following command.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
>>> >>> from mysql.connector import errors >>> from pprint import pprint >>> >>> pprint(errors._SQLSTATE_CLASS_EXCEPTION) {'02': <class 'mysql.connector.errors.DataError'>, '07': <class 'mysql.connector.errors.DatabaseError'>, '08': <class 'mysql.connector.errors.OperationalError'>, '0A': <class 'mysql.connector.errors.NotSupportedError'>, '0K': <class 'mysql.connector.errors.OperationalError'>, ... 'HY': <class 'mysql.connector.errors.DatabaseError'>, 'HZ': <class 'mysql.connector.errors.OperationalError'>, 'XA': <class 'mysql.connector.errors.IntegrityError'>} >>> >>> |
Let’s look at some examples now.
Example 1: Handling the Generic Error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import mysql.connector db = mysql.connector.connect(option_files='my.conf', use_pure=True) cursor = db.cursor() sql = """ select * from town limit 5 """ try: cursor.execute(sql) for row in cursor: print(row) cursor.close() db.close() except mysql.connector.ProgrammingError as err: print(err.errno) print(err.sqlstate) print(err.msg) except mysql.connector.Error as err: print(err) |
Remember that ProgrammingError
can catch a variety of exceptions ranging from syntax error to table not found. If you want to catch some specific error use the errorcode
module.
Example 2: Handling a specific error
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import mysql.connector from mysql.connector import errorcode db = mysql.connector.connect(option_files='my.conf', use_pure=True) cursor = db.cursor() sql = """ select * from town limit 5 """ try: cursor.execute(sql) for row in cursor: print(row) db.close() except mysql.connector.ProgrammingError as err: if errorcode.ER_NO_SUCH_TABLE == err.errno: print("No table exists") else: print("Table exists") print(err) except mysql.connector.Error as err: print("Some other error") print(err) |
Example 3: Handling multiple errors in the same way
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import mysql.connector db = mysql.connector.connect(option_files='my.conf', use_pure=True) cursor = db.cursor() sql = """ insert into city(Name, CountryCode, District, Population) VALUES ('Kabul', 'AFGANISTAN', 'Kabol', 1780000) """ try: cursor.execute(sql) db.commit() db.close() except (mysql.connector.IntegrityError, mysql.connector.DataError) as err: print("DataError or IntegrityError") print(err) except mysql.connector.ProgrammingError as err: print("Programming Error") print(err) except mysql.connector.Error as err: print(err) |
Handling Warnings #
By default, MySQL Connector/Python neither fetch warnings nor raise an exception on warnings. But, we can change that using the following arguments of the connect()
function.
Argument | Description |
---|---|
get_warnings |
If set to True warnings are fetched automatically after each query without having to manually execute SHOW WARNINGS query. Its default value is False . |
raise_on_warnings |
If set to True , an exception is raised on warnings. It defaults to False . Setting raise_on_warnings=True , also sets get_warnings=True |
The above two arguments are also available as properties of the connection object, which can be used to set and retrieve the current setting.
import mysql.connector from mysql.connector import errors db = mysql.connector.connect(option_files='my.conf') db.get_warnings = True # this is not required if raise_on_warnings=True db.raise_on_warnings = True |
Once you have set get_warnings=True
(or raise_on_warnings=True
), to retrieve the actual warning use the fetchwarnings()
method of the cursor object. The fetchwarnings()
method returns a list of tuples containing message-level, error code and the message itself generated by the previously executed query.
The following example demonstrates how to fetch warnings produced by the queries:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import mysql.connector db = mysql.connector.connect(option_files='my.conf', get_warnings=True) # db.get_warnings = True # we could have set get_warnings like this too cursor = db.cursor() cursor.execute("CREATE database if not exists world;") print(cursor.fetchwarnings()) cursor.execute("select 1/0;") cursor.fetchall() # fetch all the rows from the result set print(cursor.fetchwarnings()) |
Expected Output:
[('Note', 1007, "Can't create database 'world'; database exists")] [('Warning', 1365, 'Division by 0')] |
Note that, if the query returns result set (like the SELECT
statement) then it is necessary for you to fetch all the rows before calling the fetchwarnings()
method, otherwise, the fetchwarnings()
method would return None
.
Here is an example which shows how to raise exceptions on warnings.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import mysql.connector from mysql.connector import errors db = mysql.connector.connect(option_files='my.conf', raise_on_warnings=True) # db.raise_on_warnings = True # we could have set raise_on_warnings like this cursor = db.cursor() try: cursor.execute("CREATE database if not exists world;") print(cursor.fetchwarnings()) cursor.execute("select 1/0;") print(cursor.fetchall()) # fetch all the rows from the result set print(cursor.fetchwarnings()) except errors.DatabaseError as e: print(e) except: print('some error occurred') |
Expected Output:
1007: Can't create database 'world'; database exists
Note that setting raise_on_warnings=True
implicitly sets get_warnings=True
.
You should now have a pretty good idea of how to handle errors in the next few pages we will see some practical examples of SELECT
, INSERT
, UPDATE
and DELTETE
statements:
Содержание
- 21.6.7.1. Ошибки и Исключения
- 21.6.7.1.1. Модуль errorcode
- 21.6.7.1.2. Исключение errors.Error
- 21.6.7.1.3. Исключение errors.Warning
- 21.6.7.1.4. Исключение errors.InterfaceError
- 21.6.7.1.5. Исключение errors.DatabaseError
- 21.6.7.1.6. Исключение errors.InternalError
- 21.6.7.1.7. Исключение errors.OperationalError
- 21.6.7.1.8. Исключение errors.ProgrammingError
- 21.6.7.1.9. Исключение errors.IntegrityError
- 21.6.7.1.10. Исключение errors.DataError
- 21.6.7.1.11. Исключение errors.NotSupportedError
- 21.6.7.1.12. Функция errors.custom_error_exception(error=None,exception=None)
- Exception Handling in Connector/Python
- Errors and Warnings #
- Error #
- Warning #
- Error Codes #
- Exceptions Classes #
- Handling Warnings #
- зМБЧБ 10. Connector/Python API
- 10.1. нПДХМШ mysql.connector
- 10.1.1. нЕФПД mysql.connector.connect()
- 10.1.2. уЧПКУФЧП mysql.connector.apilevel
- 10.1.3. уЧПКУФЧП mysql.connector.paramstyle
- 10.1.4. уЧПКУФЧП mysql.connector.threadsafety
- 10.1.5. уЧПКУФЧП mysql.connector.__version__
- 10.1.6. уЧПКУФЧП mysql.connector.__version_info__
- 10.2. лМБУУ connection.MySQLConnection
- 10.2.1. лПОУФТХЛФПТ connection.MySQLConnection()
- 10.2.2. нЕФПД MySQLConnection.close()
- 10.2.3. нЕФПД MySQLConnection.commit()
- 10.2.4. нЕФПД MySQLConnection.config()
- 10.2.5. нЕФПД MySQLConnection.connect()
- 10.2.6. нЕФПД MySQLConnection.cursor()
- 10.2.7. нЕФПД MySQLConnection.cmd_change_user()
- 10.2.8. нЕФПД MySQLConnection.cmd_debug()
- 10.2.9. нЕФПД MySQLConnection.cmd_init_db()
- 10.2.10. нЕФПД MySQLConnection.cmd_ping()
- 10.2.11. нЕФПД MySQLConnection.cmd_process_info()
- 10.2.12. нЕФПД MySQLConnection.cmd_process_kill()
- 10.2.13. нЕФПД MySQLConnection.cmd_query()
- 10.2.14. нЕФПД MySQLConnection.cmd_query_iter()
- 10.2.15. нЕФПД MySQLConnection.cmd_quit()
- 10.2.16. нЕФПД MySQLConnection.cmd_refresh()
- 10.2.17. нЕФПД MySQLConnection.cmd_reset_connection()
- 10.2.18. нЕФПД MySQLConnection.cmd_shutdown()
- 10.2.19. нЕФПД MySQLConnection.cmd_statistics()
- 10.2.20. нЕФПД MySQLConnection.disconnect()
- 10.2.21. нЕФПД MySQLConnection.get_row()
- 10.2.22. нЕФПД MySQLConnection.get_rows()
- 10.2.23. нЕФПД MySQLConnection.get_server_info()
- 10.2.24. нЕФПД MySQLConnection.get_server_version()
- 10.2.25. нЕФПД MySQLConnection.is_connected()
- 10.2.26. нЕФПД MySQLConnection.isset_client_flag()
- 10.2.27. нЕФПД MySQLConnection.ping()
- 10.2.28. нЕФПД MySQLConnection.reconnect()
- 10.2.29. нЕФПД MySQLConnection.reset_session()
- 10.2.30. нЕФПД MySQLConnection.rollback()
- 10.2.31. нЕФПД MySQLConnection.set_charset_collation()
- 10.2.32. нЕФПД MySQLConnection.set_client_flags()
- 10.2.33. нЕФПД MySQLConnection.shutdown()
- 10.2.34. нЕФПД MySQLConnection.start_transaction()
- 10.2.35. уЧПКУФЧП MySQLConnection.autocommit
- 10.2.36. уЧПКУФЧП MySQLConnection.unread_results
- 10.2.37. уЧПКУФЧП MySQLConnection.can_consume_results
- 10.2.38. уЧПКУФЧП MySQLConnection.charset
- 10.2.39. уЧПКУФЧП MySQLConnection.collation
- 10.2.40. уЧПКУФЧП MySQLConnection.connection_id
- 10.2.41. уЧПКУФЧП MySQLConnection.database
- 10.2.42. уЧПКУФЧП MySQLConnection.get_warnings
- 10.2.43. уЧПКУФЧП MySQLConnection.in_transaction
- 10.2.44. уЧПКУФЧП MySQLConnection.raise_on_warnings
- 10.2.45. уЧПКУФЧП MySQLConnection.server_host
- 10.2.46. уЧПКУФЧП MySQLConnection.server_port
- 10.2.47. уЧПКУФЧП MySQLConnection.sql_mode
- 10.2.48. уЧПКУФЧП MySQLConnection.time_zone
- 10.2.49. уЧПКУФЧП MySQLConnection.unix_socket
- 10.2.50. уЧПКУФЧП MySQLConnection.user
- 10.3 pooling.MySQLConnectionPool
- 10.3.1. лПОУФТХЛФПТ pooling.MySQLConnectionPool
- 10.3.2. нЕФПД MySQLConnectionPool.add_connection()
- 10.3.3. нЕФПД MySQLConnectionPool.get_connection()
- 10.3.4. нЕФПД MySQLConnectionPool.set_config()
- 10.3.5. уЧПКУФЧП MySQLConnectionPool.pool_name
- 10.4. pooling.PooledMySQLConnection
- 10.4.1. лПОУФТХЛФПТ pooling.PooledMySQLConnection
- 10.4.2. нЕФПД PooledMySQLConnection.close()
- 10.4.3. нЕФПД PooledMySQLConnection.config()
- 10.4.4. уЧПКУФЧП PooledMySQLConnection.pool_name
- 10.5. cursor.MySQLCursor
- 10.5.1. лПОУФТХЛФПТ cursor.MySQLCursor
- 10.5.2. нЕФПД MySQLCursor.callproc()
- 10.5.3. нЕФПД MySQLCursor.close()
- 10.5.4. нЕФПД MySQLCursor.execute()
- 10.5.5. нЕФПД MySQLCursor.executemany()
- 10.5.6. нЕФПД MySQLCursor.fetchall()
- 10.5.7. нЕФПД MySQLCursor.fetchmany()
- 10.5.8. нЕФПД MySQLCursor.fetchone()
- 10.5.9. нЕФПД MySQLCursor.fetchwarnings()
- 10.5.10. нЕФПД MySQLCursor.stored_results()
- 10.5.11. уЧПКУФЧП MySQLCursor.column_names
- 10.5.12. уЧПКУФЧП MySQLCursor.description
- 10.5.13. уЧПКУФЧП MySQLCursor.lastrowid
- 10.5.14. уЧПКУФЧП MySQLCursor.rowcount
- 10.5.15. уЧПКУФЧП MySQLCursor.statement
- 10.5.16. уЧПКУФЧП MySQLCursor.with_rows
- 10.6. уХВЛМБУУЩ cursor.MySQLCursor
- 10.6.1. лМБУУ cursor.MySQLCursorBuffered
- 10.6.2. лМБУУ cursor.MySQLCursorRaw
- 10.6.3. лМБУУ cursor.MySQLCursorBufferedRaw
- 10.6.4. лМБУУ cursor.MySQLCursorDict
- 10.6.5. лМБУУ cursor.MySQLCursorBufferedDict
- 10.6.6. лМБУУ cursor.MySQLCursorNamedTuple
- 10.6.7. лМБУУ cursor.MySQLCursorBufferedNamedTuple
- 10.6.8. лМБУУ cursor.MySQLCursorPrepared
- 10.7. лМБУУ constants.ClientFlag
- 10.8. лМБУУ constants.FieldType
- 10.9. лМБУУ constants.SQLMode
- 10.10. лМБУУ constants.CharacterSet
- 10.11. лМБУУ constants.RefreshOption
- 10.12. пЫЙВЛЙ Й ЙУЛМАЮЕОЙС
- 10.12.1. нПДХМШ errorcode
- 10.12.2. йУЛМАЮЕОЙЕ errors.Error
- 10.12.3. йУЛМАЮЕОЙЕ errors.DataError
- 10.12.4. йУЛМАЮЕОЙЕ errors.DatabaseError
- 10.12.5. йУЛМАЮЕОЙЕ errors.IntegrityError
- 10.12.6. йУЛМАЮЕОЙЕ errors.InterfaceError
- 10.12.7. йУЛМАЮЕОЙЕ errors.InternalError
- 10.12.8. йУЛМАЮЕОЙЕ errors.NotSupportedError
- 10.12.9. errors.OperationalError
- 10.12.10. йУЛМАЮЕОЙЕ errors.PoolError
- 10.12.11. йУЛМАЮЕОЙЕ errors.ProgrammingError
- 10.12.12. йУЛМАЮЕОЙЕ errors.Warning
- 10.12.13. жХОЛГЙС errors.custom_error_exception()
21.6.7.1. Ошибки и Исключения
mysql.connector.errors модуль определяет классы исключений для ошибок и предупреждений, повышенных MySQL, Connector/Python. Большинство классов, определенных в этом модуле, доступно, когда Вы импортируете mysql.connector .
Классы исключений, определенные в этом модуле главным образом, следуют за Спецификацией v2.0 Базы данных Python (PEP 249). Для некоторого клиента MySQL или ошибок сервера это является не всегда четким который исключение повысить. Хорошо обсудить, должна ли ошибка быть повторно классифицирована, открывая отчет об ошибках.
Ошибки MySQL Server отображаются с исключением Python, основанным на их значении SQLSTATE (см. Раздел C.3, «Коды ошибки сервера и сообщения»). Следующая таблица показывает классы SQLSTATE и повышения Соединителя/Python исключения., однако, возможно пересмотреть, какое исключение повышается для каждой ошибки сервера. Отметьте, что исключение значения по умолчанию DatabaseError .
Класс SQLSTATE | Исключение соединителя/Python |
---|---|
02 | DataError |
02 | DataError |
07 | DatabaseError |
08 | OperationalError |
0A | NotSupportedError |
21 | DataError |
22 | DataError |
23 | IntegrityError |
24 | ProgrammingError |
25 | ProgrammingError |
26 | ProgrammingError |
27 | ProgrammingError |
28 | ProgrammingError |
2A | ProgrammingError |
2B | DatabaseError |
2C | ProgrammingError |
2D | DatabaseError |
2E | DatabaseError |
33 | DatabaseError |
34 | ProgrammingError |
35 | ProgrammingError |
37 | ProgrammingError |
3C | ProgrammingError |
3D | ProgrammingError |
3F | ProgrammingError |
40 | InternalError |
42 | ProgrammingError |
44 | InternalError |
HZ | OperationalError |
XA | IntegrityError |
0K | OperationalError |
HY | DatabaseError |
21.6.7.1.1. Модуль errorcode
Этот модуль содержит и сервер MySQL и клиентские коды ошибки, определенные, поскольку модуль приписывает с кодом ошибки как значение. Используя коды ошибки вместо кодов ошибки мог сделать чтение исходного кода немного легче.
21.6.7.1.2. Исключение errors.Error
Этим исключением является основной class для всех других исключений в errors модуль. Это может использоваться, чтобы зафиксировать все ошибки в сингле except оператор.
Следующий пример показывает, как мы могли поймать синтаксические ошибки:
Инициализация исключения поддерживает несколько дополнительных параметров, а именно, msg , errno , values и sqlstate . Все они являются дополнительными и значение по умолчанию к None . errors.Error внутренне используется Соединителем/Python, чтобы повысить ошибки клиента и сервера MySQL и не должен использоваться Вашим приложением, чтобы повысить исключения.
Следующие примеры показывают результат при использовании никаких параметров или комбинации параметров:
Пример, который использует код ошибки 1146, используется, когда Соединитель/Python получает ошибочный пакет от MySQL Server. Информация анализируется и передается к Error исключение как показано.
Каждое разделение на подклассы исключения от Error может быть инициализирован, используя ранее упомянутые параметры. Дополнительно, у каждого экземпляра есть атрибуты errno , msg и sqlstate который может использоваться в Вашем коде.
Следующий пример показывает, как обработать ошибки, отбрасывая таблицу, которая не существует (когда DROP TABLE оператор не включает a IF EXISTS пункт):
errors.Error подкласс Python StandardError .
21.6.7.1.3. Исключение errors.Warning
Это исключение используется для того, чтобы сообщить о важных предупреждениях, однако, Соединитель/Python не использует его. Это включается, чтобы быть совместимым со Спецификацией v2.0 Базы данных Python (PEP 249).
Рассмотрите использование или более строгих Режимов SQL Сервера или raise_on_warnings параметра соединения, чтобы сделать ошибки повышения Соединителя/Python, когда Ваши запросы производят предупреждения.
errors.Warning подкласс Python StandardError .
21.6.7.1.4. Исключение errors.InterfaceError
Это исключение повышается для ошибок, происходящих из Соединителя/Python непосредственно, не связывается с сервером MySQL.
errors.InterfaceError подкласс errors.Error .
21.6.7.1.5. Исключение errors.DatabaseError
Это исключение является значением по умолчанию для любой ошибки MySQL, которая не соответствует другим исключениям.
errors.DatabaseError подкласс errors.Error .
21.6.7.1.6. Исключение errors.InternalError
Это исключение повышается, когда сервер MySQL встречается с внутренней ошибкой, например, когда мертвая блокировка произошла.
errors.InternalError подкласс errors.DatabaseError .
21.6.7.1.7. Исключение errors.OperationalError
Это исключение повышается для ошибок, которые связываются с операциями MySQL. Например: слишком много соединений; имя хоста не могло быть разрешено; плохое квитирование; сервер завершает работу, коммуникационные ошибки.
errors.OperationalError подкласс errors.DatabaseError .
21.6.7.1.8. Исключение errors.ProgrammingError
Это исключение повышается при программировании ошибок, например когда у Вас есть синтаксическая ошибка в Вашем SQL, или таблица не была найдена.
Следующий пример показывает, как обработать синтаксические ошибки:
errors.ProgrammingError подкласс errors.DatabaseError .
21.6.7.1.9. Исключение errors.IntegrityError
Это исключение повышается, когда на реляционную целостность данных влияют. Например, двойной ключ был вставлен, или ограничение внешнего ключа перестанет работать.
Следующий пример показывает двойную ключевую ошибку, повышенную как IntegrityError:
errors.IntegrityError подкласс errors.DatabaseError .
21.6.7.1.10. Исключение errors.DataError
Это исключение повышается, когда были проблемы с данными. Примерами является набор столбца к NULL это не может быть NULL , значения из диапазона для столбца, подразделения нулем, количество столбца не соответствует количество значения и так далее.
errors.DataError подкласс errors.DatabaseError .
21.6.7.1.11. Исключение errors.NotSupportedError
Это исключение повышается, когда некоторая функция была использована, который не поддерживается версией MySQL, который возвратил ошибку. Это также повышается при использовании функций или операторов, которые не поддерживаются сохраненными подпрограммами.
errors.NotSupportedError подкласс errors.DatabaseError .
21.6.7.1.12. Функция errors.custom_error_exception(error=None,exception=None)
Этот метод определяет пользовательские исключения для ошибок сервера MySQL и возвращает текущие настройки.
Если error код ошибки MySQL Server, следует также передать exception class. error параметром может быть словарь, когда ключ является кодом ошибки сервера, и оцените class исключения, которое будет повышено.
Чтобы сбросить настройки, предоставьте пустой словарь.
Источник
Exception Handling in Connector/Python
Last updated on July 27, 2020
Error happens all the time when programming, so its better to equip yourself how to deal with them.
Errors and Warnings #
There are two levels of error message severity in MySQL.
Error #
An Error indicates a problem with query or command which prevented it from being executed.
Warning #
Warning tells you some thing unexpected has happened that could cause problem down the line, but it is not severe enough to stop the statement from being executed. We can display warnings using SHOW WARNINGS; command. For example:
Error Codes #
Errors and warnings in MySQL contains three pieces of information:
A unique MySQL specific error code ( 1146 ) that is not portable to other databases.
A 5 character code ( 42S02 ) called SQLSTATE which is used to indicate success or failure of the operation. The SQLSTATE is portable across other databases. It consists of two parts: the first two character represents SQL error class and the next three represents subclass. Each class can belong to one of the following four categories.
- Success (class 00)
- Warning (class 01)
- No Data (class 02)
- Exception (all the others 07-HZ)
A textual description of the error.
So why two error codes?
This is because SQLSTATE represents a group of errors. As a result, we can only use it to handle generic errors. If you want to handle some specific error use MySQL-specific error code.
There are hundreds of MySQL-specific error codes. Fortunately, you don’t need to memorize them as the mysql.connector.errorcode module contains all the MySQL-specific error codes.
Exceptions Classes #
All the exception classes for dealing with error and warnings are defined in mysql.connector.errors module.
The mysql.connector.errors.Error is the base class for all the other exceptions. We can use it to catch any kind of exception.
Here is an example:
Expected Output:
When an exception is thrown you have access to error code, SQLSTATE and error message in the form of errno , sqlstate and msg attributes of the exception object.
The mysql.connector.errors.Error base class is further subclassed into the following three class:
- DatabaseError
- InterfaceError
- PoolError
Let’s discuss them one by one.
DatabaseError : This exception is raised for errors related to the database. It can catch a variety of errors like problem in data processing, error in SQL syntax, MySQL internal problems etc. If a connection is made and a problem arises then DatabaseError will catch it. There are 6 types of DatabaseError :
- DataError
- InternalError
- IntegrityError
- OperationalError
- NotSupportedError
- ProgrammingError
- DataError : This error indicates a problem with the data processing, like division by zero, numeric value out of range, invalid type etc.
- InternalError : This exception is raised when the database encounters an internal error. For e.g invalid cursor, transaction out of sync etc.
- IntegrityError : This exception is raised when the foreign key constraint fails.
- OperationalError : This exception is raised for things that are not in control of the programmer. For e.g unexpected disconnect, error in memory allocation etc, transaction failure, selected database not exists.
- NotSupportedError : This exception is raised when you invoke method or api that is not supported. For example, calling rollback() on a connection that doesn’t support the transaction.
- ProgrammingError : This exception is raised of programming errors. For e.g table not found or already exists, error in MySQL syntax, wrong number of parameters specified, wrong connection credentials etc.
InterfaceError : This exception is raised for errors related to the interface (in our case interface is MySQL Connector/Python) rather than the database itself.
PoolError : It is raised for errors related to connection pooling. We will learn about the connection pooling in the upcoming chapter.
The following figure shows the hierarchy of the exception classes:
All the exception classes are mapped to one or more SQLSTATE class, you can print this mapping by typing the following command.
Let’s look at some examples now.
Example 1: Handling the Generic Error
Remember that ProgrammingError can catch a variety of exceptions ranging from syntax error to table not found. If you want to catch some specific error use the errorcode module.
Example 2: Handling a specific error
Example 3: Handling multiple errors in the same way
Handling Warnings #
By default, MySQL Connector/Python neither fetch warnings nor raise an exception on warnings. But, we can change that using the following arguments of the connect() function.
Argument | Description |
---|---|
get_warnings | If set to True warnings are fetched automatically after each query without having to manually execute SHOW WARNINGS query. Its default value is False . |
raise_on_warnings | If set to True , an exception is raised on warnings. It defaults to False . Setting raise_on_warnings=True , also sets get_warnings=True |
The above two arguments are also available as properties of the connection object, which can be used to set and retrieve the current setting.
Once you have set get_warnings=True (or raise_on_warnings=True ), to retrieve the actual warning use the fetchwarnings() method of the cursor object. The fetchwarnings() method returns a list of tuples containing message-level, error code and the message itself generated by the previously executed query.
The following example demonstrates how to fetch warnings produced by the queries:
Expected Output:
Note that, if the query returns result set (like the SELECT statement) then it is necessary for you to fetch all the rows before calling the fetchwarnings() method, otherwise, the fetchwarnings() method would return None .
Here is an example which shows how to raise exceptions on warnings.
Expected Output:
Note that setting raise_on_warnings=True implicitly sets get_warnings=True .
You should now have a pretty good idea of how to handle errors in the next few pages we will see some practical examples of SELECT , INSERT , UPDATE and DELTETE statements:
Источник
зМБЧБ 10. Connector/Python API
ьФБ ЗМБЧБ УПДЕТЦЙФ ПРЙУБОЙЕ API ДМС Connector/Python. рТЙНЕТЩ ОХЦОП ТБУУНПФТЕФШ, ТБВПФБС ОБ Python 2.7 ЙМЙ Python 3.1 Й ЧЩЫЕ. пОЙ НПЗМЙ ВЩ ФБЛЦЕ ТБВПФБФШ ОБ ВПМЕЕ УФБТЩИ ЧЕТУЙСИ (ФБЛЙИ ЛБЛ Python 2.4), ЕУМЙ ПОЙ ОЕ ЙУРПМШЪХАФ ЖХОЛГЙЙ, ЧЧЕДЕООЩЕ Ч ВПМЕЕ ОПЧЩИ ЧЕТУЙСИ Python. оБРТЙНЕТ, ПВТБВПФЛБ ЙУЛМАЮЕОЙК ЙУРПМШЪХС ЛМАЮЕЧПЕ УМПЧП as ВЩМБ ЧЧЕДЕОБ Ч Python 2.6 Й ОЕ ВХДЕФ ТБВПФБФШ Ч Python 2.4.
уМЕДХАЭЙК ПВЪПТ РПЛБЪЩЧБЕФ РБЛЕФ mysql.connector У ЕЗП НПДХМСНЙ. ч ОБУФПСЭЕЕ ЧТЕНС ФПМШЛП УБНЩЕ РПМЕЪОЩЕ НПДХМЙ, ЛМБУУЩ Й НЕФПДЩ ДМС ЛПОЕЮОЩИ РПМШЪПЧБФЕМЕК ПРЙУБОЩ.
10.1. нПДХМШ mysql.connector
нПДХМШ mysql.connector РТЕДПУФБЧМСЕФ НЕФПДЩ Й УЧПКУФЧБ ЧЕТИОЕЗП ХТПЧОС.
10.1.1. нЕФПД mysql.connector.connect()
ьФПФ НЕФПД ОБУФТБЙЧБЕФ УЧСЪШ, ХУФБОБЧМЙЧБС УЕУУЙА УЧСЪЙ У УЕТЧЕТПН MySQL. еУМЙ ОЙЛБЛЙЕ БТЗХНЕОФЩ ОЕ ДБОЩ, ЬФП ЙУРПМШЪХЕФ ХЦЕ ЪБДБООЩЕ ЙМЙ ЪОБЮЕОЙС РП ХНПМЮБОЙА. дМС РПМОПЗП УРЙУЛБ ЧПЪНПЦОЩИ БТЗХНЕОФПЧ РПУНПФТЙФЕ ТБЪДЕМ 7.1.
уЧСЪШ У УЕТЧЕТПН MySQL НПЦЕФ ВЩФШ ХУФБОПЧМЕОБ, ЙУРПМШЪХС НЕФПД mysql.connector.connect() ЙМЙ ЛМБУУ mysql.connector.MySQLConnection() :
дМС ПРЙУБОЙК НЕФПДПЧ УЧСЪЙ Й УЧПКУФЧ, РПУНПФТЙФЕ ТБЪДЕМ 10.2.
10.1.2. уЧПКУФЧП mysql.connector.apilevel
ьФП УЧПКУФЧП РПУМЕДПЧБФЕМШОПУФШ, ЛПФПТБС ХЛБЪЩЧБЕФ ОБ РПДДЕТЦБООЩК ХТПЧЕОШ API DB.
10.1.3. уЧПКУФЧП mysql.connector.paramstyle
ьФП УЧПКУФЧП РПУМЕДПЧБФЕМШОПУФШ, ЛПФПТБС ХЛБЪЩЧБЕФ ОБ УФЙМШ РБТБНЕФТБ Connector/Python РП ХНПМЮБОЙА.
10.1.4. уЧПКУФЧП mysql.connector.threadsafety
ьФП УЧПКУФЧП ГЕМПЕ ЮЙУМП, ЛПФПТПЕ ХЛБЪЩЧБЕФ ОБ РПДДЕТЦБООЩК ХТПЧЕОШ РПФПЛПВЕЪПРБУОПУФЙ, ПВЕУРЕЮЕООПК Connector/Python.
10.1.5. уЧПКУФЧП mysql.connector.__version__
ьФП УЧПКУФЧП ХЛБЪЩЧБЕФ ЧЕТУЙА Connector/Python ЛБЛ УФТПЛХ. ьФП ДПУФХРОП У Connector/Python 1.1.0.
10.1.6. уЧПКУФЧП mysql.connector.__version_info__
ьФП УЧПКУФЧП ХЛБЪЩЧБЕФ ЧЕТУЙА Connector/Python ЛБЛ НОПЦЕУФЧП ЛПНРПОЕОФПЧ ЧЕТУЙЙ. ьФП ДПУФХРОП У Connector/Python 1.1.0.
10.2. лМБУУ connection.MySQLConnection
лМБУУ MySQLConnection ЙУРПМШЪХЕФУС, ЮФПВЩ ПФЛТЩФШ Й ХРТБЧМСФШ УЧСЪША У УЕТЧЕТПН MySQL. ьФП ФБЛЦЕ ТБОШЫЕ РПУЩМБМП ЛПНБОДЩ Й SQL-ПРЕТБФПТЩ Й ЮЙФБМП ТЕЪХМШФБФЩ.
10.2.1. лПОУФТХЛФПТ connection.MySQLConnection()
лПОУФТХЛФПТ MySQLConnection ЙОЙГЙБМЙЪЙТХЕФ БФТЙВХФЩ Й ЛПЗДБ РП ЛТБКОЕК НЕТЕ ПДЙО БТЗХНЕОФ РЕТЕДБЕФУС, ПО РЩФБЕФУС УПЕДЙОЙФШУС У УЕТЧЕТПН MySQL.
дМС РПМОПЗП УРЙУЛБ БТЗХНЕОФПЧ РПУНПФТЙФЕ ТБЪДЕМ 7.1.
10.2.2. нЕФПД MySQLConnection.close()
close() УЙОПОЙН disconnect() . уН. ТБЪДЕМ 10.2.20.
дМС УЧСЪЙ, РПМХЮЕООПК ЙЪ РХМБ УЧСЪЙ, close() ОБ УБНПН ДЕМЕ ОЕ ЪБЛТЩЧБЕФ ЕЕ, Б ЧПЪЧТБЭБЕФ Ч РХМ Й ДЕМБЕФ ДПУФХРОПК ДМС РПУМЕДХАЭЙИ ЪБРТПУПЧ УЧСЪЙ. рПУНПФТЙФЕ ТБЪДЕМ 9.1.
10.2.3. нЕФПД MySQLConnection.commit()
ьФПФ НЕФПД РПУЩМБЕФ COMMIT УЕТЧЕТХ MySQL, РЕТЕДБЧБС ФЕЛХЭХА ФТБОЪБЛГЙА. Connector/Python РП ХНПМЮБОЙА ОЕ ДЕМБЕФ autocommit, РПЬФПНХ ЧБЦОП ЧЩЪЧБФШ ЬФПФ НЕФПД РПУМЕ ЛБЦДПК ФТБОЪБЛГЙЙ, ЛПФПТБС ЙЪНЕОСЕФ ДБООЩЕ ДМС ФБВМЙГ У ФТБОЪБЛГЙПООЩН НЕИБОЙЪНПН ИТБОЕОЙС.
юФПВЩ ПФЛБФЙФШУС ОБЪБД ЧНЕУФП ЬФПЗП Й ПФЛБЪБФШУС ПФ НПДЙЖЙЛБГЙК, РПУНПФТЙФЕ НЕФПД rollback().
10.2.4. нЕФПД MySQLConnection.config()
жПТНЙТХЕФ ЬЛЪЕНРМСТ MySQLConnection РПУМЕ ФПЗП, ЛБЛ ЬФП УПЪДБОП. дМС РПМОПЗП УРЙУЛБ ЧПЪНПЦОЩИ БТЗХНЕОФПЧ РПУНПФТЙФЕ ТБЪДЕМ 7.1.
kwargs : бТЗХНЕОФЩ УПЕДЙОЕОЙС.
чЩ НПЗМЙ ЙУРПМШЪПЧБФШ НЕФПД config() , ЮФПВЩ ЙЪНЕОЙФШ (ОБРТЙНЕТ), ЙНС РПМШЪПЧБФЕМС, Б ЪБФЕН ЧЩЪЧБФШ reconnect() .
дМС УЧСЪЙ, РПМХЮЕООПК ЙЪ РХМБ УЧСЪЙ, config() РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ. рПУНПФТЙФЕ ТБЪДЕМ 9.1.
10.2.5. нЕФПД MySQLConnection.connect()
ьФПФ НЕФПД ОБУФТБЙЧБЕФ УЧСЪШ, ХУФБОБЧМЙЧБС УЕУУЙА У УЕТЧЕТПН MySQL. еУМЙ ОЙЛБЛЙЕ БТЗХНЕОФЩ ОЕ ДБОЩ, ЬФП ЙУРПМШЪХЕФ ХЦЕ ОБУФТПЕООЩЕ ЙМЙ ЪОБЮЕОЙС РП ХНПМЮБОЙА. дМС РПМОПЗП УРЙУЛБ ЧПЪНПЦОЩИ БТЗХНЕОФПЧ РПУНПФТЙФЕ ТБЪДЕМ 7.1.
kwargs : бТЗХНЕОФЩ УПЕДЙОЕОЙС.
дМС УЧСЪЙ, РПМХЮЕООПК ЙЪ РХМБ УЧСЪЙ, ЛМБУУ ПВЯЕЛФБ УЧСЪЙ PooledMySQLConnection . пВЯЕДЙОЕООБС УЧСЪШ ПФМЙЮБЕФУС ПФ ОЕПВЯЕДЙОЕООПК УЧСЪЙ, ЛБЛ ПРЙУБОП Ч ТБЪДЕМЕ 9.1.
10.2.6. нЕФПД MySQLConnection.cursor()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ ПВЯЕЛФ MySQLCursor() ЙМЙ ЕЗП РПДЛМБУУ Ч ЪБЧЙУЙНПУФЙ ПФ РЕТЕДБЧБЕНЩИ БТЗХНЕОФПЧ. чПЪЧТБЭЕООЩК ПВЯЕЛФ ЬФП ЬЛЪЕНРМСТ cursor.CursorBase . дМС РПМХЮЕОЙС ДПРПМОЙФЕМШОПК ЙОЖПТНБГЙЙ ПВ ПВЯЕЛФБИ ЛХТУПТБ, РПУНПФТЙФЕ ТБЪДЕМЩ 10.5 Й 10.6.
бТЗХНЕОФЩ НПЗХФ ВЩФШ РЕТЕДБОЩ НЕФПДХ cursor() , ЮФПВЩ ЛПОФТПМЙТПЧБФШ, ЛБЛПК ЛХТУПТ УПЪДБФШ:
еУМЙ buffered = True , ЛХТУПТ РТЙОПУЙФ ЧУЕ УФТПЛЙ ПФ УЕТЧЕТБ РПУМЕ ФПЗП, ЛБЛ ПРЕТБГЙС ВХДЕФ ЧЩРПМОЕОБ. ьФП РПМЕЪОП, ЛПЗДБ ЪБРТПУЩ ЧПЪЧТБЭБАФ ОЕВПМШЫЙЕ ОБВПТЩ ТЕЪХМШФБФПЧ. buffered НПЦЕФ ЙУРПМШЪПЧБФШУС ПДЙО ЙМЙ Ч УПЮЕФБОЙЙ У РБТБНЕФТПН dictionary ЙМЙ named_tuple .
buffered НПЦЕФ ФБЛЦЕ ВЩФШ РЕТЕДБО connect() , ЮФПВЩ ХУФБОПЧЙФШ УРПУПВ ВХЖЕТЙЪБГЙЙ РП ХНПМЮБОЙА ДМС ЧУЕИ ЛХТУПТПЧ, УПЪДБООЩИ ЙЪ ПВЯЕЛФБ УЧСЪЙ. рПУНПФТЙФЕ ТБЪДЕМ 7.1.
дМС РПМХЮЕОЙС ЙОЖПТНБГЙЙ П П РПУМЕДУФЧЙСИ ВХЖЕТЙЪПЧБОЙС РПУНПФТЙФЕ ТБЪДЕМ 10.6.1 .
еУМЙ raw = True , ЛХТУПТ РТПРХУЛБЕФ РТЕПВТБЪПЧБОЙЕ ПФ ФЙРПЧ ДБООЩИ MySQL Ч ФЙРЩ Python. уЩТПК ЛХТУПТ ПВЩЮОП ЙУРПМШЪХЕФУС, ЮФПВЩ РПМХЮЙФШ МХЮЫХА РТПЙЪЧПДЙФЕМШОПУФШ ЙМЙ ЛПЗДБ ЧЩ ИПФЙФЕ УДЕМБФШ РТЕПВТБЪПЧБОЙЕ УБНЙ.
raw НПЦЕФ ФБЛЦЕ ВЩФШ РЕТЕДБО connect() , ЮФПВЩ ХУФБОПЧЙФШ ТЕЦЙН ВЕЪ РТЕДЧБТЙФЕМШОПК ПВТБВПФЛЙ РП ХНПМЮБОЙА ДМС ЧУЕИ ЛХТУПТПЧ, УПЪДБООЩИ ЙЪ ПВЯЕЛФБ УЧСЪЙ. рПУНПФТЙФЕ ТБЪДЕМ 7.1.
еУМЙ dictionary = True , ЛХТУПТ ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ УМПЧБТЙ. ьФПФ БТЗХНЕОФ ДПУФХРЕО У Connector/Python 2.0.0.
еУМЙ named_tuple = True , ЛХТУПТ ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ ОБЪЧБООЩЕ ЛПТФЕЦБНЙ. ьФПФ БТЗХНЕОФ ДПУФХРЕО У Connector/Python 2.0.0.
еУМЙ prepared = True , ЛХТУПТ ЙУРПМШЪХЕФУС ДМС ЧЩРПМОЕОЙС РПДЗПФПЧМЕООЩИ ЪБРТПУПЧ. ьФПФ БТЗХНЕОФ ДПУФХРЕО У Connector/Python 1.1.2. тБУЫЙТЕОЙЕ C РПДДЕТЦЙЧБЕФ ЬФП У Connector/Python 8.0.17.
рБТБНЕФТ cursor_class НПЦЕФ ЙУРПМШЪПЧБФШУС, ЮФПВЩ РЕТЕДБФШ ЛМБУУ ДМС ФПЗП, ЮФПВЩ УПЪДБФШ ОПЧЩК ЛХТУПТ. ьФП ДПМЦЕО ВЩФШ РПДЛМБУУ cursor.CursorBase .
чПЪЧТБЭЕООЩК ПВЯЕЛФ ЪБЧЙУЙФ ПФ ЛПНВЙОБГЙЙ БТЗХНЕОФПЧ. рТЙНЕТЩ:
еУМЙ not buffered and not raw: MySQLCursor .
еУМЙ buffered and not raw: MySQLCursorBuffered .
еУМЙ not buffered and raw: MySQLCursorRaw .
еУМЙ buffered and raw: MySQLCursorBufferedRaw .
10.2.7. нЕФПД MySQLConnection.cmd_change_user()
йЪНЕОСЕФ РПМШЪПЧБФЕМС, ЙУРПМШЪХАЭЕЗП username Й password . ьФП ФБЛЦЕ ОБЪОБЮЙФ ХЛБЪБООХА database ВБЪПК ДБООЩИ РП ХНПМЮБОЙА. фБЛЦЕ ЧПЪНПЦОП ЙЪНЕОЙФШ ОБВПТ УЙНЧПМПЧ, ЙУРПМШЪХС РБТБНЕФТ charset .
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
10.2.8. нЕФПД MySQLConnection.cmd_debug()
рТЙЛБЪЩЧБЕФ УЕТЧЕТХ РЙУБФШ ПФМБДПЮОХА ЙОЖПТНБГЙА Ч ЦХТОБМ ПЫЙВПЛ. рПДЛМАЮЕООЩК РПМШЪПЧБФЕМШ ДПМЦЕО ЙНЕФШ РТЙЧЙМЕЗЙА SUPER .
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
10.2.9. нЕФПД MySQLConnection.cmd_init_db()
ьФПФ НЕФПД ДЕМБЕФ ПРТЕДЕМЕООХА ВБЪХ ДБООЩИ ВБЪПК ДБООЩИ РП ХНПМЮБОЙА. ч РПУМЕДХАЭЙИ ЪБРТПУБИ ЬФБ ВБЪБ ДБООЩИ ВХДЕФ ХНПМЮБОЙЕН ДМС УУЩМПЛ ОБ ФБВМЙГХ, ЛПФПТЩЕ ОЕ ЧЛМАЮБАФ СЧОПЗП ПРТЕДЕМЙФЕМС ВБЪЩ ДБООЩИ.
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
10.2.10. нЕФПД MySQLConnection.cmd_ping()
рТПЧЕТЛБ, ТБВПФБЕФ МЙ УЧСЪШ У УЕТЧЕТПН.
ьФПФ НЕФПД ОЕ ДПМЦЕО ЙУРПМШЪПЧБФШУС ОЕРПУТЕДУФЧЕООП. йУРПМШЪХКФЕ ping() ЙМЙ is_connected().
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
10.2.11. нЕФПД MySQLConnection.cmd_process_info()
ьФПФ НЕФПД РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ NotSupportedError. чНЕУФП ЬФПЗП ЙУРПМШЪХКФЕ SHOW PROCESSLIST ЙМЙ ЪБРТПУ ФБВМЙГЩ Ч ВБЪЕ ДБООЩИ INFORMATION_SCHEMA .
ьФБ ЖХОЛГЙПОБМШОПУФШ MySQL Server ХУФБТЕМБ.
10.2.12. нЕФПД MySQLConnection.cmd_process_kill()
ьФБ ЖХОЛГЙПОБМШОПУФШ MySQL Server ХУФБТЕМБ.
рТПУЙФ УЕТЧЕТ ХВЙФШ РПФПЛ mysql_pid . иПФС ЧУЕ ЕЭЕ ДПУФХРОП, МХЮЫЕ ЙУРПМШЪПЧБФШ SQL-ПРЕТБФПТ KILL .
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
уМЕДХАЭЙЕ ДЧЕ УФТПЛЙ ЙНЕАФ ФПФ ЦЕ УБНЩК ЬЖЖЕЛФ:
10.2.13. нЕФПД MySQLConnection.cmd_query()
ьФПФ НЕФПД РПУЩМБЕФ ДБООЩК statement УЕТЧЕТХ MySQL Й РПМХЮБЕФ ТЕЪХМШФБФ. юФПВЩ РПУМБФШ НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ, ЙУРПМШЪХКФЕ cmd_query_iter().
чПЪЧТБЭЕООЩК УМПЧБТШ УПДЕТЦЙФ ЙОЖПТНБГЙА Ч ЪБЧЙУЙНПУФЙ ПФ ФПЗП, ЛБЛПК ЪБРТПУ ВЩМ ЧЩРПМОЕО. еУМЙ ЪБРТПУ SELECT , ТЕЪХМШФБФ УПДЕТЦЙФ ЙОЖПТНБГЙА П УФПМВГБИ. дТХЗЙЕ ЪБРТПУЩ ЧПЪЧТБЭБАФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙМЙ EOF.
пЫЙВЛЙ, РПМХЮЕООЩЕ ПФ УЕТЧЕТБ MySQL, РПДОСФЩ ЛБЛ ЙУЛМАЮЕОЙС. InterfaceError РПДОСФП, ЛПЗДБ НОПЗПЛТБФОЩЕ ТЕЪХМШФБФЩ ОБКДЕОЩ.
10.2.14. нЕФПД MySQLConnection.cmd_query_iter()
бОБМПЗ cmd_query(), ОП ЧЕТОЕФ ПВЯЕЛФ ЗЕОЕТБФПТБ ДМС ЙФЕТБГЙЙ ТЕЪХМШФБФБ. йУРПМШЪХКФЕ cmd_query_iter() РПУЩМБС НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ Й ПФДЕМСЕФЕ ЪБРТПУЩ ФПЮЛБНЙ У ЪБРСФПК.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ТБВПФБФШ У ТЕЪХМШФБФБНЙ РПУМЕ ПФРТБЧЛЙ НОПЗПЮЙУМЕООЩИ ЪБРТПУПЧ:
чПЪЧТБЭБЕФ ПВЯЕЛФ ЗЕОЕТБФПТБ.
10.2.15. нЕФПД MySQLConnection.cmd_quit()
ьФПФ НЕФПД РПУЩМБЕФ QUIT УЕТЧЕТХ MySQL, ЪБЛТЩЧБС ФЕЛХЭХА УЧСЪШ. у ФЕИ РПТ ПФ УЕТЧЕТБ MySQL ОЕФ ОЙЛБЛПЗП ПФЧЕФБ, РБЛЕФ, ЛПФПТЩК РПУМБМЙ, ЧПЪЧТБЭЕО.
10.2.16. нЕФПД MySQLConnection.cmd_refresh()
ьФБ ЖХОЛГЙПОБМШОПУФШ MySQL Server ХУФБТЕМБ.
ьФПФ НЕФПД УВТБУЩЧБЕФ ФБВМЙГЩ ЙМЙ ЛЬЫЙ ЙМЙ ЙОЖПТНБГЙА П УЕТЧЕТЕ ТЕРМЙЛБГЙЙ. рПДЛМАЮЕООЩК РПМШЪПЧБФЕМШ ДПМЦЕО ЙНЕФШ РТЙЧЙМЕЗЙА RELOAD .
options ДПМЦЕО ВЩФШ ЪОБЮЕОЙЕН ВЙФПЧПК НБУЛЙ, РПУФТПЕООПК, ЙУРПМШЪХС ЛПОУФБОФЩ ЙЪ ЛМБУУБ constants.RefreshOption .
дМС УРЙУЛБ ЧБТЙБОФПЧ РПУНПФТЙФЕ ТБЪДЕМ 10.11.
10.2.17. нЕФПД MySQLConnection.cmd_reset_connection()
рЕТЕЪБЗТХЦБЕФ УЧСЪШ, РПУЩМБС COM_RESET_CONNECTION УЕТЧЕТХ, ЮФПВЩ ПЮЙУФЙФШ УПУФПСОЙЕ УЕБОУБ.
ьФПФ НЕФПД ТБЪТЕЫБЕФ УПУФПСОЙА УЕБОУБ ВЩФШ ПЮЙЭЕООЩН ВЕЪ РЕТЕРПДФЧЕТЦДЕОЙС. дМС УЕТЧЕТПЧ MySQL, ВПМЕЕ УФБТЩИ, ЮЕН 5.7.3 (ЛПЗДБ ВЩМ ЧЧЕДЕО COM_RESET_CONNECTION ), ДПМЦЕО ЙУРПМШЪПЧБФШУС НЕФПД reset_session() . ьФПФ НЕФПД РЕТЕЪБЗТХЦБЕФ УПУФПСОЙЕ УЕБОУБ, РПЧФПТОП РПДФЧЕТЦДБС РПДМЙООПУФШ, ЮФП СЧМСЕФУС ВПМЕЕ ДПТПЗЙН.
ьФПФ НЕФПД ДПВБЧМЕО Ч Connector/Python 1.2.1.
10.2.18. нЕФПД MySQLConnection.cmd_shutdown()
ьФБ ЖХОЛГЙПОБМШОПУФШ MySQL Server ХУФБТЕМБ.
рТПУЙФ УЕТЧЕТ ВБЪЩ ДБООЩИ ЪБЧЕТЫЙФШУС. рПДЛМАЮЕООЩК РПМШЪПЧБФЕМШ ДПМЦЕО ЙНЕФШ РТЙЧЙМЕЗЙА SHUTDOWN .
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК OK ЙОЖПТНБГЙА П РБЛЕФЕ.
10.2.19. нЕФПД MySQLConnection.cmd_statistics()
чПЪЧТБЭБЕФ УМПЧБТШ, УПДЕТЦБЭЙК ЙОЖПТНБГЙА П УЕТЧЕТЕ MySQL ЧЛМАЮБС РТПДПМЦЙФЕМШОПУФШ ТБВПФЩ Ч УЕЛХОДБИ Й ЛПМЙЮЕУФЧП ТБВПФБАЭЙИ РПФПЛПЧ, ЪБРТПУПЧ, РЕТЕЪБЗТХЪПЛ Й ПФЛТЩФЩИ ФБВМЙГ.
10.2.20. нЕФПД MySQLConnection.disconnect()
ьФПФ НЕФПД РЩФБЕФУС РПУМБФШ QUIT Й ЪБЛТЩФШ УПЛЕФ. ьФП ОЕ РПДОЙНБЕФ ЙУЛМАЮЕОЙК.
MySQLConnection.close() УЙОПОЙН ЬФПЗП НЕФПДБ Й ЮБЭЕ ЧУЕЗП ЙУРПМШЪХЕНЩК.
юФПВЩ ЪБЛТЩФШ УЧСЪШ, ОЕ РПУЩМБС QUIT , ЙУРПМШЪХКФЕ shutdown() .
10.2.21. нЕФПД MySQLConnection.get_row()
ьФПФ НЕФПД ЧПУУФБОБЧМЙЧБЕФ УМЕДХАЭХА УФТПЛХ ОБВПТБ ТЕЪХМШФБФБ ЪБРТПУБ, ЧПЪЧТБЭБС ЛПТФЕЦ.
лПТФЕЦ, ЧПЪЧТБЭЕООЩК get_row() УПУФПЙФ ЙЪ:
уФТПЛБ ЛБЛ ЛПТФЕЦ, УПДЕТЦБЭЙК ПВЯЕЛФЩ ВБКФБ ЙМЙ None , ЛПЗДБ ВПМШЫЕ УФТПЛ ОЕДПУФХРОП.
EOF ЛБЛ УМПЧБТШ, УПДЕТЦБЭЙК status_flag Й warning_count ЙМЙ None , ЛПЗДБ ЧПЪЧТБЭЕООБС УФТПЛБ ОЕ СЧМСЕФУС РПУМЕДОЕК.
нЕФПД get_row() ЙУРПМШЪХЕФУС MySQLCursor, ЮФПВЩ РПМХЮЙФШ УФТПЛЙ.
10.2.22. нЕФПД MySQLConnection.get_rows()
ьФПФ НЕФПД РПМХЮБЕФ ЧУЕ ЙМЙ ПУФБАЭЙЕУС УФТПЛЙ ОБВПТБ ТЕЪХМШФБФБ ЪБРТПУБ, ЧПЪЧТБЭБС ЛПТФЕЦ, УПДЕТЦБЭЙК УФТПЛЙ ЛБЛ РПУМЕДПЧБФЕМШОПУФЙ Й EOF. бТЗХНЕОФ ЛПМЙЮЕУФЧБ НПЦЕФ ЙУРПМШЪПЧБФШУС, ЮФПВЩ РПМХЮЙФШ ЪБДБООПЕ ЛПМЙЮЕУФЧП УФТПЛ. еУМЙ ЛПМЙЮЕУФЧП ОЕ ПРТЕДЕМСЕФУС ЙМЙ None , ЧУЕ УФТПЛЙ ЧПЪЧТБЭБАФУС.
лПТФЕЦ, ЧПЪЧТБЭЕООЩК get_rows() УПУФПЙФ ЙЪ:
уРЙУПЛ ЛПТФЕЦЕК, УПДЕТЦБЭЙИ ДБООЩЕ П УФТПЛЕ ЛБЛ ВБКФ-ПВЯЕЛФЩ ЙМЙ РХУФПК УРЙУПЛ, ЛПЗДБ ОЙЛБЛЙЕ УФТПЛЙ ОЕДПУФХРОЩ.
EOF ЛБЛ УМПЧБТШ, УПДЕТЦБЭЙК status_flag Й warning_count .
InterfaceError РПДОСФП, ЛПЗДБ ЧУЕ УФТПЛЙ ВЩМЙ РПМХЮЕОЩ.
MySQLCursor ЙУРПМШЪХЕФ НЕФПД get_rows() , ЮФПВЩ РПМХЮЙФШ УФТПЛЙ.
10.2.23. нЕФПД MySQLConnection.get_server_info()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ ЙОЖПТНБГЙА П УЕТЧЕТЕ MySQL ДПУМПЧОП ЛБЛ РПУМЕДПЧБФЕМШОПУФШ, ОБРТЙНЕТ, ‘5.6.11-log’ ЙМЙ None , ЕУМЙ ОЕ УЧСЪБО.
10.2.24. нЕФПД MySQLConnection.get_server_version()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ ЧЕТУЙА УЕТЧЕТБ MySQL ЛБЛ ЛПТФЕЦ ЙМЙ None , ЕУМЙ ОЕ УЧСЪБО.
10.2.25. нЕФПД MySQLConnection.is_connected()
уППВЭБЕФ, ДПУФХРОБ МЙ УЧСЪШ У MySQL Server.
ьФПФ НЕФПД РТПЧЕТСЕФ, СЧМСЕФУС МЙ УЧСЪШ У MySQL ДПУФХРОПК, ЙУРПМШЪХС НЕФПД ping() , ОП Ч ПФМЙЮЙЕ ПФ ЬФПЗП ping() , is_connected() ЧЕТОЕФ True , ЛПЗДБ УЧСЪШ ДПУФХРОБ, False ЙОБЮЕ.
10.2.26. нЕФПД MySQLConnection.isset_client_flag()
ьФПФ НЕФПД ЧЕТОЕФ True , ЕУМЙ ЖМБЗ ЛМЙЕОФБ ВЩМ ХУФБОПЧМЕО, False ЙОБЮЕ.
10.2.27. нЕФПД MySQLConnection.ping()
рТПЧЕТСЕФ, ДПУФХРОБ МЙ УЧСЪШ У УЕТЧЕТПН MySQL.
лПЗДБ reconnect = True , УДЕМБОП attempts РПРЩФПЛ УОПЧБ УПЕДЙОЙФШУС У УЕТЧЕТПН MySQL, Й ЬФЙ ПРГЙЙ ПФРТБЧМЕОЩ НЕФПДХ reconnect(). йУРПМШЪХКФЕ НЕФПД delay (УЕЛХОДЩ), ЕУМЙ ЧЩ ИПФЙФЕ ЦДБФШ РЕТЕД ЛБЦДПК РПЧФПТОПК РПРЩФЛПК.
лПЗДБ УЧСЪШ ОЕДПУФХРОБ, InterfaceError РПДОСФП. йУРПМШЪХКФЕ НЕФПД is_connected(), ЮФПВЩ РТПЧЕТЙФШ УЧСЪШ, ОЕ РПДОЙНБС ПЫЙВЛХ.
рПДОЙНБЕФ ОБ ПЫЙВЛБИ InterfaceError .
10.2.28. нЕФПД MySQLConnection.reconnect()
рПРЩФЛБ УОПЧБ УПЕДЙОЙФШУС У УЕТЧЕТПН MySQL.
бТЗХНЕОФ attempts ПРТЕДЕМСЕФ ЮЙУМП ТБЪ, ЛПФПТПЕ ОБДП РПРТПВПЧБФШ УОПЧБ УПЕДЙОЙФШУС. бТЗХНЕОФ delay ЬФП ЮЙУМП УЕЛХОД, ЛПФПТПЕ ЦДБФШ РЕТЕД ЛБЦДПК РПЧФПТОПК РПРЩФЛПК.
чЩ НПЗМЙ ВЩ ПРТЕДЕМЙФШ ЮЙУМП РПРЩФПЛ ЧЩЫЕ Й ЙУРПМШЪПЧБФШ ВПМЕЕ ДМЙООХА ЪБДЕТЦЛХ, ЛПЗДБ ЧЩ ПЦЙДБЕФЕ, ЮФП УЕТЧЕТ MySQL ПУФБОПЧМЕО ДМС ПВУМХЦЙЧБОЙС, ЙМЙ ЛПЗДБ ЧЩ ВХДЕФЕ ПЦЙДБФШ, ЮФП УЕФШ ВХДЕФ ЧТЕНЕООП ОЕДПУФХРОБ.
10.2.29. нЕФПД MySQLConnection.reset_session()
рЕТЕЪБЗТХЦБЕФ УЧСЪШ, РПЧФПТОП РПДФЧЕТЦДБС РПДМЙООПУФШ, ЮФПВЩ ПЮЙУФЙФШ УПУФПСОЙЕ УЕБОУБ. user_variables , ЕУМЙ ЪБДБО, ЬФП УМПЧБТШ ЙНЕО Й ЪОБЮЕОЙК РПМШЪПЧБФЕМШУЛЙИ РЕТЕНЕООЩИ. session_variables , ЕУМЙ ЪБДБО, ЬФП УМПЧБТШ УМПЧБТШ ЙНЕО Й ЪОБЮЕОЙК УЙУФЕНОЩИ РЕТЕНЕООЩИ. нЕФПД ХУФБОБЧМЙЧБЕФ ЛБЦДХА РЕТЕНЕООХА Ч ДБООПЕ ЪОБЮЕОЙЕ.
ьФПФ НЕФПД РЕТЕЪБЗТХЦБЕФ УПУФПСОЙЕ УЕБОУБ, РПЧФПТОП РПДФЧЕТЦДБС РПДМЙООПУФШ. дМС УЕТЧЕТПЧ MySQL 5.7 ЙМЙ ЧЩЫЕ cmd_reset_connection() ВПМЕЕ МЕЗЛБС БМШФЕТОБФЙЧБ.
ьФПФ НЕФПД ДПВБЧМЕО Ч Connector/Python 1.2.1.
10.2.30. нЕФПД MySQLConnection.rollback()
ьФПФ НЕФПД РПУЩМБЕФ УЕТЧЕТХ MySQL ЪБРТПУ ROLLBACK , ПФНЕОСС ЧУЕ ЙЪНЕОЕОЙС ДБООЩИ ПФ ФЕЛХЭЕК ФТБОЪБЛГЙЙ. рП ХНПМЮБОЙА Connector/Python ОЕ ДЕМБЕФ autocommit, ФБЛЙН ПВТБЪПН, ЧПЪНПЦОП ПФНЕОЙФШ ФТБОЪБЛГЙЙ, ЙУРПМШЪХС НЕИБОЙЪНЩ ИТБОЕОЙС ФТБОЪБЛГЙК, ОБРТЙНЕТ, InnoDB .
юФПВЩ РЕТЕДБФШ НПДЙЖЙЛБГЙЙ, РПУНПФТЙФЕ НЕФПД commit().
10.2.31. нЕФПД MySQLConnection.set_charset_collation()
ьФПФ НЕФПД ХУФБОБЧМЙЧБЕФ ОБВПТ УЙНЧПМПЧ Й УПРПУФБЧМЕОЙЕ ДМС ФЕЛХЭЕК УЧСЪЙ. рБТБНЕФТ charset НПЦЕФ ВЩФШ ОБЪЧБОЙЕН ОБВПТБ УЙНЧПМПЧ ЙМЙ ЮЙУМПЧЩН ЬЛЧЙЧБМЕОФПН, ЛБЛ ПРТЕДЕМЕОП Ч constants.CharacterSet .
лПЗДБ collation = None , ЙУРПМШЪХЕФУС УПРПУФБЧМЕОЙЕ РП ХНПМЮБОЙА ДМС ОБВПТБ УЙНЧПМПЧ.
ч УМЕДХАЭЕН РТЙНЕТЕ НЩ ХУФБОБЧМЙЧБЕН ОБВПТ УЙНЧПМПЧ Ч latin1 Й УПРПУФБЧМЕОЙЕ Ч latin1_swedish_ci (УПРПУФБЧМЕОЙЕ РП ХНПМЮБОЙА ДМС latin1 ):
пРТЕДЕМЙФЕ ДБООПЕ УПРПУФБЧМЕОЙЕ УМЕДХАЭЙН ПВТБЪПН:
10.2.32. нЕФПД MySQLConnection.set_client_flags()
ьФПФ НЕФПД ХУФБОБЧМЙЧБЕФ ЖМБЗЙ ЛМЙЕОФБ, УПЕДЙОССУШ У УЕТЧЕТПН MySQL Й ЧПЪЧТБЭБЕФ ОПЧПЕ ЪОБЮЕОЙЕ ЛБЛ ГЕМПЕ ЮЙУМП. рБТБНЕФТ flags НПЦЕФ ВЩФШ ГЕМЩН ЮЙУМПН ЙМЙ РПУМЕДПЧБФЕМШОПУФША ДЕКУФЧЙФЕМШОЩИ ЖМБЗПЧЩИ ЪОБЮЕОЙК ЛМЙЕОФБ (УН. ТБЪДЕМ 10.7).
еУМЙ flags РПУМЕДПЧБФЕМШОПУФШ, ЛБЦДЩК РХОЛФ Ч РПУМЕДПЧБФЕМШОПУФЙ ХУФБОБЧМЙЧБЕФ ЖМБЗ, ЛПЗДБ ЪОБЮЕОЙЕ РПМПЦЙФЕМШОП ЙМЙ УВТБУЩЧБЕФ ЕЗП, ЛПЗДБ ПФТЙГБФЕМШОП. оБРТЙНЕТ, ЮФПВЩ УВТПУЙФШ LONG_FLAG Й ХУФБОПЧЙФШ FOUND_ROWS :
жМБЗЙ ЛМЙЕОФБ ХУФБОБЧМЙЧБАФУС ЙМЙ ЙУРПМШЪХАФУС ФПМШЛП УПЕДЙОССУШ У УЕТЧЕТПН MySQL. рПЬФПНХ ОЕПВИПДЙНП УОПЧБ УПЕДЙОЙФШУС РПУМЕ ЧОЕУЕОЙС ЙЪНЕОЕОЙК.
10.2.33. нЕФПД MySQLConnection.shutdown()
ьФПФ НЕФПД ЪБЛТЩЧБЕФ УПЛЕФ. ьФП ОЕ РПДОЙНБЕФ ЙУЛМАЮЕОЙК.
ч ПФМЙЮЙЕ ПФ ЬФПЗП, disconnect() , shutdown() ЪБЛТЩЧБЕФ УЧСЪШ ЛМЙЕОФБ, ОЕ РЩФБСУШ УОБЮБМБ РПУМБФШ QUIT УЕТЧЕТХ. фБЛЙН ПВТБЪПН ЬФП ОЕ ЪБВМПЛЙТХЕФ, ЕУМЙ УЧСЪШ ВХДЕФ ТБЪТХЫЕОБ РП ОЕЛПФПТЩН РТЙЮЙОБН, ОБРТЙНЕТ, ЙЪ-ЪБ ПФЛБЪБ УЕФЙ.
shutdown() ДПВБЧМЕО Ч Connector/Python 2.0.1.
10.2.34. нЕФПД MySQLConnection.start_transaction()
ьФПФ НЕФПД ОБЮЙОБЕФ ФТБОЪБЛГЙА. ьФП РТЙОЙНБЕФ БТЗХНЕОФЩ, ХЛБЪЩЧБАЭЙЕ, ЙУРПМШЪПЧБФШ МЙ РПУМЕДПЧБФЕМШОЩК УОЙНПЛ, ЛПФПТЩК ХТПЧЕОШ ЙЪПМСГЙЙ ФТБОЪБЛГЙЙ ОХЦЕО Й ПРЕТБГЙПООЩК ТЕЦЙН ДПУФХРБ:
рП ХНПМЮБОЙА consistent_snapshot = False . еУМЙ ЪОБЮЕОЙЕ True , Connector/Python РПУЩМБЕФ WITH CONSISTENT SNAPSHOT У ЪБРТПУПН. MySQL ЙЗОПТЙТХЕФ ЬФП ДМС ХТПЧОЕК ЙЪПМСГЙЙ, ДМС ЛПФПТЩИ ОЕ РТЙНЕОСЕФУС ЬФПФ ЧБТЙБОФ.
рП ХНПМЮБОЙА isolation_level = None , ТБЪТЕЫЕООЩЕ ЪОБЮЕОЙС: ‘READ UNCOMMITTED’ , ‘READ COMMITTED’ , ‘REPEATABLE READ’ Й ‘SERIALIZABLE’ . еУМЙ isolation_level = None , ОЙЛБЛПК ХТПЧЕОШ ЙЪПМСГЙЙ ОЕ РПУЩМБАФ, ФБЛЙН ПВТБЪПН, РТЙНЕОСЕФУС ХТПЧЕОШ РП ХНПМЮБОЙА.
рБТБНЕФТ readonly НПЦЕФ ВЩФШ True , ЮФПВЩ ОБЮБФШ ФТБОЪБЛГЙА Ч ТЕЦЙНЕ READ ONLY ЙМЙ False ДМС ТЕЦЙНБ READ WRITE . еУМЙ readonly РТПРХЭЕО, ТЕЦЙН ДПУФХРБ УЕТЧЕТБ РП ХНПМЮБОЙА ЙУРПМШЪХЕФУС. дМС РПМХЮЕОЙС ДПРПМОЙФЕМШОПК ЙОЖПТНБГЙЙ ПВ ПРЕТБГЙПООПН ТЕЦЙНЕ ДПУФХРБ УН. ПРЙУБОЙЕ ДМС START TRANSACTION Ч START TRANSACTION, COMMIT, and ROLLBACK Statements. еУМЙ УЕТЧЕТ ВПМЕЕ УФБТЩК, ЮЕН MySQL 5.6.5, ПО ОЕ РПДДЕТЦЙЧБЕФ ОБУФТПКЛХ ТЕЦЙНБ ДПУФХРБ, Й Connector/Python РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ ValueError .
чЩЪПЧ start_transaction() РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ ProgrammingError , ЕУМЙ ЧЩЪЧБО Ч ФП ЧТЕНС, ЛБЛ РТПЙУИПДЙФ ФТБОЪБЛГЙС. ьФП ПФМЙЮБЕФУС ПФ ЧЩРПМОЕОЙС SQL-ЪБРТПУБ START TRANSACTION Ч ФП ЧТЕНС ЛБЛ РТПЙУИПДЙФ ФТБОЪБЛГЙС: ЪБРТПУ ОЕСЧОП РЕТЕДБЕФ ФЕЛХЭХА ФТБОЪБЛГЙА.
юФПВЩ ПРТЕДЕМЙФШ, БЛФЙЧОБ МЙ ФТБОЪБЛГЙС ДМС УЧСЪЙ, ЙУРПМШЪХКФЕ УЧПКУФЧП in_transaction.
start_transaction() ДПВБЧМЕО Ч MySQL Connector/Python 1.1.0. рБТБНЕФТ readonly ДПВБЧМЕО Ч Connector/Python 1.1.5.
10.2.35. уЧПКУФЧП MySQLConnection.autocommit
ьФПНХ УЧПКУФЧХ НПЦОП ОБЪОБЮЙФШ ЪОБЮЕОЙЕ True ЙМЙ False , ЮФПВЩ РПЪЧПМЙФШ ЙМЙ ПФЛМАЮЙФШ autocommit Ч MySQL. уЧПКУФЧП НПЦЕФ ВЩФШ ЧЩЪЧБОП, ЮФПВЩ ХЪОБФШ ЪОБЮЕОЙЕ autocommit.
Autocommit ПФЛМАЮЕО РП ХНПМЮБОЙА, УПЕДЙОССУШ ЮЕТЕЪ Connector/Python. ьФП НПЦЕФ ВЩФШ РПЪЧПМЕОП, ЙУРПМШЪХС РБТБНЕФТ УПЕДЙОЕОЙС autocommit .
лПЗДБ autocommit ЧЩЛМАЮЕО, ОЕПВИПДЙНП РЕТЕДБЧБФШ ФТБОЪБЛГЙЙ, ЙУРПМШЪХС НЕИБОЙЪНЩ УЙУФЕНЩ ИТБОЕОЙС ФТБОЪБЛГЙК, ОБРТЙНЕТ, InnoDB ЙМЙ NDBCluster .
10.2.36. уЧПКУФЧП MySQLConnection.unread_results
хЛБЪЩЧБЕФ, ЕУФШ МЙ ОЕРТПЮЙФБООЩК ТЕЪХМШФБФ. ьФП ХУФБОПЧМЕОП Ч False , ЕУМЙ ОЕФ ОЕРТПЮЙФБООПЗП ТЕЪХМШФБФБ, ЙОБЮЕ True . ьФП ЙУРПМШЪХЕФУС ЛХТУПТБНЙ, ЮФПВЩ РТПЧЕТЙФШ, ДПМЦЕО МЙ ДТХЗПК ЛХТУПТ ЧУЕ ЕЭЕ РПМХЮЙФШ УЧПК ОБВПТ ТЕЪХМШФБФПЧ.
оЕ ХУФБОБЧМЙЧБКФЕ ЪОБЮЕОЙЕ ЬФПНХ УЧПКУФЧХ, РПУЛПМШЛХ ФПМШЛП УПЕДЙОЙФЕМШ ДПМЦЕО ЙЪНЕОЙФШ ЪОБЮЕОЙЕ. дТХЗЙНЙ УМПЧБНЙ, ТБУУНБФТЙЧБКФЕ ЬФП ЛБЛ УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС.
10.2.37. уЧПКУФЧП MySQLConnection.can_consume_results
ьФП УЧПКУФЧП ХЛБЪЩЧБЕФ ОБ ЪОБЮЕОЙЕ РБТБНЕФТБ УЧСЪЙ consume_results , ЛПФПТЩК ХРТБЧМСЕФ, РТПЮЙФБОЩ МЙ ОБВПТЩ ТЕЪХМШФБФПЧ, РТПЙЪЧЕДЕООЩЕ ЪБРТПУБНЙ БЧФПНБФЙЮЕУЛЙ. уН. ТБЪДЕМ 7.1.
ьФП ДПВБЧМЕОП Ч Connector/Python 2.1.1.
10.2.38. уЧПКУФЧП MySQLConnection.charset
ьФП УЧПКУФЧП ЧПЪЧТБЭБЕФ РПУМЕДПЧБФЕМШОПУФШ, ХЛБЪЩЧБАЭХА, ЛБЛПК ОБВПТ УЙНЧПМПЧ ЙУРПМШЪХЕФУС ДМС УЧСЪЙ.
10.2.39. уЧПКУФЧП MySQLConnection.collation
ьФП УЧПКУФЧП ЧПЪЧТБЭБЕФ РПУМЕДПЧБФЕМШОПУФШ, ХЛБЪЩЧБАЭХА, ЛБЛПЕ УПРПУФБЧМЕОЙЕ ЙУРПМШЪХЕФУС ДМС УЧСЪЙ.
10.2.40. уЧПКУФЧП MySQLConnection.connection_id
ьФП УЧПКУФЧП ЧПЪЧТБЭБЕФ ID УЧСЪЙ (ID РПФПЛБ ЙМЙ УЕУУЙЙ) ДМС ФЕЛХЭЕК УЧСЪЙ (ГЕМПЕ ЮЙУМП) ЙМЙ None , ЕУМЙ ОЕФ УЧСЪЙ.
10.2.41. уЧПКУФЧП MySQLConnection.database
ьФП УЧПКУФЧП ХУФБОБЧМЙЧБЕФ ФЕЛХЭХА ВБЪХ ДБООЩИ, ЧЩРПМОСС ЪБРТПУ USE . уЧПКУФЧП НПЦЕФ ФБЛЦЕ ЙУРПМШЪПЧБФШУС, ЮФПВЩ ХЪОБФШ ФЕЛХЭЕЕ ЙНС ВБЪЩ ДБООЩИ.
10.2.42. уЧПКУФЧП MySQLConnection.get_warnings
ьФПНХ УЧПКУФЧХ НПЦОП ОБЪОБЮЙФШ ЪОБЮЕОЙЕ True ЙМЙ False , ЮФПВЩ РПЪЧПМЙФШ ЙМЙ ПФЛМАЮЙФШ БЧФПНБФЙЮЕУЛПЕ РПМХЮЕОЙЕ РТЕДХРТЕЦДЕОЙК. хНПМЮБОЙЕ False . уЧПКУФЧП НПЦЕФ ВЩФШ РТЙНЕОЕОП, ЮФПВЩ ХЪОБФШ ФЕЛХЭЕЕ УПУФПСОЙЕ РТЕДХРТЕЦДЕОЙК.
рПМХЮЕОЙЕ РТЕДХРТЕЦДЕОЙК БЧФПНБФЙЮЕУЛЙ НПЦЕФ ВЩФШ РПМЕЪОЩН, ПФМБЦЙЧБС ЪБРТПУЩ. лХТУПТЩ ДЕМБАФ РТЕДХРТЕЦДЕОЙС ДПУФХРОЩНЙ ЮЕТЕЪ НЕФПД MySQLCursor.fetchwarnings().
чПЪЧТБЭБЕФ True ЙМЙ False .
10.2.43. уЧПКУФЧП MySQLConnection.in_transaction
ьФП УЧПКУФЧП ЧЕТОЕФ True ЙМЙ False , ЮФПВЩ ХЛБЪБФШ, БЛФЙЧОБ МЙ ФТБОЪБЛГЙС ДМС УЧСЪЙ. ъОБЮЕОЙЕ True ОЕЪБЧЙУЙНП ПФ ФПЗП, ОБЮЙОБЕФЕ МЙ ЧЩ ФТБОЪБЛГЙА, ЙУРПМШЪХС ЧЩЪПЧ API start_transaction() ЙМЙ ОЕРПУТЕДУФЧЕООП ЧЩРПМОСС SQL-ПРЕТБФПТ START TRANSACTION ЙМЙ BEGIN .
in_transaction ДПВБЧМЕОП Ч MySQL Connector/Python 1.1.0.
10.2.44. уЧПКУФЧП MySQLConnection.raise_on_warnings
ьФПНХ УЧПКУФЧХ НПЦОП ОБЪОБЮЙФШ ЪОБЮЕОЙЕ True ЙМЙ False , ЮФПВЩ РПЪЧПМЙФШ ЙМЙ ПФЛМАЮЙФШ, ДПМЦОЩ МЙ РТЕДХРТЕЦДЕОЙС РПДОСФШ ЙУЛМАЮЕОЙС. хНПМЮБОЙЕ False . уЧПКУФЧП НПЦЕФ ВЩФШ ЙУРПМШЪПЧБОП, ЮФПВЩ ХЪОБФШ ФЕЛХЭЙК ТЕЦЙН ЙУЛМАЮЕОЙК.
пРТЕДЕМЕОЙЕ raise_on_warnings ФБЛЦЕ ХУФБОПЧЙФ get_warnings РПФПНХ ЮФП РТЕДХРТЕЦДЕОЙС ДПМЦОЩ ВЩФШ РПМХЮЕОЩ, ЮФПВЩ ПОЙ НПЗМЙ ВЩФШ РПДОСФЩ ЛБЛ ЙУЛМАЮЕОЙС.
чЩ НПЗМЙ ВЩ ЧУЕЗДБ ИПФЕФШ ХУФБОПЧЙФШ ТЕЦЙН SQL, ЕУМЙ ФТЕВХЕФУС ЙНЕФШ УЕТЧЕТ MySQL, ОЕРПУТЕДУФЧЕООП УППВЭБАЭЙК П РТЕДХРТЕЦДЕОЙСИ ЛБЛ ПВ ПЫЙВЛБИ (УН. ТБЪДЕМ 10.2.47). фБЛЦЕ ИПТПЫП ЙУРПМШЪПЧБФШ ФТБОЪБЛГЙПООЩЕ НЕИБОЙЪНЩ, ФБЛЙН ПВТБЪПН ФТБОЪБЛГЙЙ НПЗХФ ВЩФШ ПФНЕОЕОЩ, МПЧС ЙУЛМАЮЕОЙЕ.
оБВПТЩ ТЕЪХМШФБФПЧ ДПМЦОЩ ВЩФШ РПМХЮЕОЩ РПМОПУФША, РТЕЦДЕ ЮЕН МАВПЕ ЙУЛМАЮЕОЙЕ НПЦЕФ ВЩФШ РПДОСФП. уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ ЧЩРПМОЕОЙЕ ЪБРТПУБ, ЛПФПТЩК РТПЙЪЧПДЙФ РТЕДХРТЕЦДЕОЙЕ:
чЕТОЕФ True ЙМЙ False .
10.2.45. уЧПКУФЧП MySQLConnection.server_host
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЙНС ИПУФБ ЙМЙ IP-БДТЕУ, ЙУРПМШЪХЕНЩК ДМС УПЕДЙОЕОЙС У УЕТЧЕТПН MySQL.
10.2.46. уЧПКУФЧП MySQLConnection.server_port
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ РПТФ TCP/IP, ЙУРПМШЪХЕНЩК ДМС УПЕДЙОЕОЙС У УЕТЧЕТПН MySQL.
чПЪЧТБЭБЕФ ГЕМПЕ ЮЙУМП.
10.2.47. уЧПКУФЧП MySQLConnection.sql_mode
ьФП УЧПКУФЧП ЙУРПМШЪХЕФУС, ЮФПВЩ РПМХЮЙФШ Й ХУФБОПЧЙФШ ТЕЦЙНЩ SQL ДМС ФЕЛХЭЕК УЧСЪЙ. ъОБЮЕОЙЕ ДПМЦОП ВЩФШ УРЙУЛПН ТБЪМЙЮОЩИ ТЕЦЙНПЧ, ПФДЕМЕООЩИ ЪБРСФПК («,»), ЙМЙ РПУМЕДПЧБФЕМШОПУФША ТЕЦЙНПЧ, РТЕДРПЮФЙФЕМШОП ЙУРПМШЪХС ЛМБУУ constants.SQLMode .
юФПВЩ УВТПУЙФШ ЧУЕ ТЕЦЙНЩ, РЕТЕДБКФЕ РХУФХА УФТПЛХ ЙМЙ РХУФХА РПУМЕДПЧБФЕМШОПУФШ.
10.2.48. уЧПКУФЧП MySQLConnection.time_zone
ьФП УЧПКУФЧП ЙУРПМШЪХЕФУС, ЮФПВЩ ХУФБОПЧЙФШ ЙМЙ ХЪОБФШ РЕТЕНЕООХА УЕБОУБ ЮБУПЧПЗП РПСУБ ДМС ФЕЛХЭЕК УЧСЪЙ.
10.2.49. уЧПКУФЧП MySQLConnection.unix_socket
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЖБКМ УПЛЕФБ Unix ДМС УПЕДЙОЕОЙС У УЕТЧЕТПН MySQL.
10.2.50. уЧПКУФЧП MySQLConnection.user
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЙНС РПМШЪПЧБФЕМС, ЙУРПМШЪХЕНПЕ ДМС УПЕДЙОЕОЙС У УЕТЧЕТПН MySQL.
10.3 pooling.MySQLConnectionPool
ьФПФ ЛМБУУ РТЕДПУФБЧМСЕФ ЬЛЪЕНРМСТ Й ХРТБЧМЕОЙЕ РХМБНЙ УЧСЪЙ.
10.3.1. лПОУФТХЛФПТ pooling.MySQLConnectionPool
лПОУФТХЛФПТ УПЪДБЕФ ПВЯЕЛФ, ЛПФПТЩК ХРТБЧМСЕФ РХМПН УЧСЪЙ.
pool_name : оБЪЧБОЙЕ РХМБ. еУМЙ ЬФПФ БТЗХНЕОФ ОЕ ДБО, Connector/Python БЧФПНБФЙЮЕУЛЙ РТПЙЪЧПДЙФ ЙНС, УПУФБЧМЕООПЕ ЙЪ ЪОБЮЕОЙК host , port , user Й database Ч kwargs , ЙНЕООП Ч ЬФПН РПТСДЛЕ.
еУМЙ ОЕУЛПМШЛП РХМПЧ ЙНЕАФ ПДЙОБЛПЧПЕ ЙНС, ЬФП ОЕ ПЫЙВЛБ. рТЙМПЦЕОЙЕ, ЛПФПТПЕ ДПМЦОП ПФМЙЮЙФШ РХМЩ РП ЙИ pool_name , ДПМЦОП УПЪДБФШ ЛБЦДЩК РХМ У ПФМЙЮОЩН ЙНЕОЕН.
pool_size : тБЪНЕТ РХМБ. еУМЙ ЬФПФ БТЗХНЕОФ ОЕ ДБО, ХНПМЮБОЙЕ ТБЧОСЕФУС 5.
pool_reset_session : рЕТЕЪБЗТХЪЙФШ МЙ РЕТЕНЕООЩЕ УЕБОУБ, ЛПЗДБ УЧСЪШ ЧПЪЧТБЭЕОБ Ч РХМ. ьФПФ БТЗХНЕОФ ВЩМ ДПВБЧМЕО Ч Connector/Python 1.1.5. дП 1.1.5 РЕТЕНЕООЩЕ УЕБОУБ ОЕ РЕТЕЪБЗТХЦБАФУС.
kwargs : дПРПМОЙФЕМШОЩЕ БТЗХНЕОФЩ УПЕДЙОЕОЙС, ЛБЛ ПРЙУБОП Ч ТБЪДЕМЕ 7.1.
10.3.2. нЕФПД MySQLConnectionPool.add_connection()
ьФПФ НЕФПД ДПВБЧМСЕФ ОПЧПЕ ЙМЙ УХЭЕУФЧХАЭЕЕ УПЕДЙОЕОЙЕ MySQLConnection Ч РХМ ЙМЙ РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ PoolError , ЕУМЙ РХМ РПМПО.
cnx : пВЯЕЛФ MySQLConnection , ЛПФПТЩК ВХДЕФ ДПВБЧМЕО Л РХМХ. еУМЙ ЬФПФ БТЗХНЕОФ ПФУХФУФЧХЕФ, РХМ УПЪДБЕФ ОПЧХА УЧСЪШ Й ДПВБЧМСЕФ ЕЗП.
10.3.3. нЕФПД MySQLConnectionPool.get_connection()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ УЧСЪШ ЙЪ РХМБ ЙМЙ РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ PoolError , ЕУМЙ ОЙЛБЛЙЕ УЧСЪЙ ОЕДПУФХРОЩ.
10.3.4. нЕФПД MySQLConnectionPool.set_config()
ьФПФ НЕФПД ХУФБОБЧМЙЧБЕФ РБТБНЕФТЩ ЛПОЖЙЗХТБГЙЙ ДМС УЧСЪЕК Ч РХМЕ. уЧСЪЙ, РПМХЮБЕНЩЕ ЙЪ РХМБ РПУМЕ ЙУРПМШЪПЧБОЙС ЙЪНЕОЕОЙС ЛПОЖЙЗХТБГЙЙ, ЙНЕАФ ОПЧЩЕ РБТБНЕФТЩ. уЧСЪЙ, РПМХЮЕООЩЕ РЕТЕД ЙЪНЕОЕОЙЕН, ПУФБАФУС ОЕЪБФТПОХФЩНЙ, ОП ЛПЗДБ ПОЙ ЪБЛТЩЧБАФУС (ЧПЪЧТБЭЕОЩ Ч РХМ), ВХДХФ ЧОПЧШ ПФЛТЩФЩ У ОПЧЩНЙ РБТБНЕФТБНЙ РТЕЦДЕ, ЮЕН ЧПЪЧТБЭЕОЩ РХМПН ДМС РПУМЕДХАЭЙИ ЪБРТПУПЧ УЧСЪЙ.
kwargs : бТЗХНЕОФЩ УПЕДЙОЕОЙС.
10.3.5. уЧПКУФЧП MySQLConnectionPool.pool_name
ьФП УЧПКУФЧП ЧПЪЧТБЭБЕФ ОБЪЧБОЙЕ РХМБ УЧСЪЙ.
10.4. pooling.PooledMySQLConnection
ьФПФ ЛМБУУ ЙУРПМШЪХЕФУС MySQLConnectionPool , ЮФПВЩ ЧПЪЧТБФЙФШ ПВЯЕДЙОЕООЩК ЬЛЪЕНРМСТ УЧСЪЙ. ьФП ФБЛЦЕ ЛМБУУ, ЙУРПМШЪХЕНЩК ДМС УЧСЪЕК, РПМХЮЕООЩИ ЧЩЪПЧПН НЕФПДБ connect() , ЛПФПТЩК ЧЩЪЩЧБЕФ РХМ УЧСЪЙ (УН. ТБЪДЕМ 9.1).
пВЯЕЛФЩ УЧСЪЙ PooledMySQLConnection РПДПВОЩ ОЕПВЯЕДЙОЕООЩН ПВЯЕЛФБН УЧСЪЙ MySQLConnection У ЬФЙНЙ ТБЪМЙЮЙСНЙ:
юФПВЩ ПУЧВПДЙФШ ПВЯЕДЙОЕООХА УЧСЪШ, РПМХЮЕООХА ЙЪ РХМБ УЧСЪЙ, ЧЩЪПЧЙФЕ close() ФБЛ ЦЕ, ЛБЛ ДМС МАВПК ОЕПВЯЕДЙОЕООПК УЧСЪЙ. пДОБЛП ДМС ПВЯЕДЙОЕООПК УЧСЪЙ close() ОБ УБНПН ДЕМЕ ОЕ ЪБЛТЩЧБЕФ УЧСЪШ, Б ЧПЪЧТБЭБЕФ ЕЕ Ч РХМ Й ДЕМБЕФ ДПУФХРОПК ДМС РПУМЕДХАЭЙИ ЪБРТПУПЧ УЧСЪЙ.
пВЯЕДЙОЕООБС УЧСЪШ ОЕ НПЦЕФ РПЧФПТОП ЖПТНЙТПЧБФШУС, ЙУРПМШЪХС config() . йЪНЕОЕОЙС УЧСЪЙ ДПМЦОЩ ВЩФШ УДЕМБОЩ ЮЕТЕЪ УБН ПВЯЕЛФ РХМБ, ЛБЛ ПРЙУБОП Ч ТБЪДЕМЕ 9.1.
х ПВЯЕДЙОЕООПК УЧСЪЙ ЕУФШ УЧПКУФЧП pool_name , ЛПФПТПЕ ЧПЪЧТБЭБЕФ ОБЪЧБОЙЕ РХМБ.
10.4.1. лПОУФТХЛФПТ pooling.PooledMySQLConnection
лПОУФТХЛФПТ ЛПОУФТХЛФПТ ВЕТЕФ РХМ УЧСЪЙ Й БТЗХНЕОФЩ УПЕДЙОЕОЙС Й ЧПЪЧТБЭБЕФ ПВЯЕДЙОЕООХА УЧСЪШ. ьФП ЙУРПМШЪХЕФУС ЛМБУУПН MySQLConnectionPool .
cnxpool : ьЛЪЕНРМСТ MySQLConnectionPool .
cnx : ьЛЪЕНРМСТ MySQLConnection .
10.4.2. нЕФПД PooledMySQLConnection.close()
чПЪЧТБЭБЕФ ПВЯЕДЙОЕООХА УЧСЪШ Ч ЕЕ РХМ УЧСЪЙ.
дМС ПВЯЕДЙОЕООПК УЧСЪЙ close() ОБ УБНПН ДЕМЕ ОЕ ЪБЛТЩЧБЕФ ЕЕ, Б ЧПЪЧТБЭБЕФ ЕЕ Ч РХМ Й ДЕМБЕФ ДПУФХРОПК ДМС РПУМЕДХАЭЙИ ЪБРТПУПЧ УЧСЪЙ.
еУМЙ РБТБНЕФТЩ ЛПОЖЙЗХТБГЙЙ РХМБ ЙЪНЕОСАФУС, ЧПЪЧТБЭЕООБС УЧСЪШ ЪБЛТЩФБ Й ЧОПЧШ ПФЛТЩФБ У ОПЧПК ЛПОЖЙЗХТБГЙЕК РТЕЦДЕ, ЮЕН ВЩФШ ЧПЪЧТБЭЕООПК ЙЪ РХМБ УОПЧБ Ч ПФЧЕФ ОБ ЪБРТПУ УЧСЪЙ.
10.4.3. нЕФПД PooledMySQLConnection.config()
дМС ПВЯЕДЙОЕООЩИ УЧСЪЕК config() РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ PoolError . лПОЖЙЗХТБГЙС ДМС ПВЯЕДЙОЕООЩИ УЧСЪЕК ДПМЦОБ ВЩФШ ТЕБМЙЪПЧБОБ, ЙУРПМШЪХС ПВЯЕЛФ РХМБ.
10.4.4. уЧПКУФЧП PooledMySQLConnection.pool_name
ьФП УЧПКУФЧП ЧПЪЧТБЭБЕФ ОБЪЧБОЙЕ РХМБ УЧСЪЙ, ЛПФПТПНХ РТЙОБДМЕЦЙФ УЧСЪШ.
10.5. cursor.MySQLCursor
лМБУУ MySQLCursor РПТПЦДБЕФ ПВЯЕЛФЩ, ЛПФПТЩЕ НПЗХФ ЧЩРПМОЙФШ ПРЕТБГЙЙ, ФБЛЙЕ ЛБЛ SQL-ПРЕТБФПТЩ. пВЯЕЛФЩ ЛХТУПТБ ЧЪБЙНПДЕКУФЧХАФ У УЕТЧЕТПН MySQL, ЙУРПМШЪХС ПВЯЕЛФ MySQLConnection .
юФПВЩ УПЪДБФШ ЛХТУПТ, ЙУРПМШЪХКФЕ НЕФПД cursor() ПВЯЕЛФБ УЧСЪЙ:
оЕУЛПМШЛП УЧСЪБООЩИ ЛМБУУПЧ ОБУМЕДХАФ MySQLCursor . юФПВЩ УПЪДБФШ ЛХТУПТ ПДОПЗП ЙЪ ЬФЙИ ФЙРПЧ, РЕТЕДБКФЕ УППФЧЕФУФЧХАЭЙЕ БТЗХНЕОФЩ cursor() :
MySQLCursorBuffered УПЪДБЕФ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.1 .
MySQLCursorRaw УПЪДБЕФ УЩТПК ЛХТУПТ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.2.
MySQLCursorBufferedRaw УПЪДБЕФ ВХЖЕТЙЪЙТПЧБООЩК УЩТПК ЛХТУПТ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.3 .
MySQLCursorDict УПЪДБЕФ ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ УМПЧБТЙ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.4.
MySQLCursorBufferedDict УПЪДБЕФ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ УМПЧБТЙ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.5.
MySQLCursorNamedTuple УПЪДБЕФ ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ ОБЪЧБООЩЕ ЛПТФЕЦБНЙ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.6 .
MySQLCursorBufferedNamedTuple УПЪДБЕФ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ УФТПЛЙ ЛБЛ ОБЪЧБООЩЕ ЛПТФЕЦБНЙ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.7.
MySQLCursorPrepared УПЪДБЕФ ЛХТУПТ ДМС ЧЩРПМОЕОЙС РПДЗПФПЧМЕООЩИ ЪБРТПУПЧ. рПУНПФТЙФЕ ТБЪДЕМ 10.6.8 .
10.5.1. лПОУФТХЛФПТ cursor.MySQLCursor
ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ НЕФПД MySQLConnection cursor() ЙУРПМШЪХЕФУС, ЮФПВЩ УПЪДБФШ ПВЯЕЛФ MySQLCursor :
фБЛЦЕ ЧПЪНПЦОП УПЪДБФШ ЛХТУПТ, РЕТЕДБЧБС ПВЯЕЛФ MySQLConnection Л MySQLCursor :
бТЗХНЕОФ УПЕДЙОЕОЙС ДПРПМОЙФЕМШОЩК. еУМЙ ПРХЭЕО, ЛХТУПТ УПЪДБЕФУС, ОП НЕФПД execute() РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ.
10.5.2. нЕФПД MySQLCursor.callproc()
ьФПФ НЕФПД ЧЩЪЩЧБЕФ ИТБОЙНХА РТПГЕДХТХ, ХЛБЪБООХА РБТБНЕФТПН proc_name . рПУМЕДПЧБФЕМШОПУФШ РБТБНЕФТПЧ args ДПМЦОБ УПДЕТЦБФШ ПДОХ ЪБРЙУШ ДМС ЛБЦДПЗП БТЗХНЕОФБ, ЛПФПТЩК РТПГЕДХТБ ПЦЙДБЕФ. callproc() ЧПЪЧТБЭБЕФ ЙЪНЕОЕООХА ЛПРЙА ЧИПДОПК РПУМЕДПЧБФЕМШОПУФЙ. чИПДОЩЕ РБТБНЕФТЩ ПУФБЧМСАФ ОЕФТПОХФЩНЙ. чЩЧПД Й РБТБНЕФТЩ ЧЧПДБ/ЧЩЧПДБ НПЗХФ ВЩФШ ЪБНЕОЕОЩ ОПЧЩНЙ ЪОБЮЕОЙСНЙ.
оБВПТЩ ТЕЪХМШФБФПЧ, РТПЙЪЧЕДЕООЩЕ ИТБОЙНПК РТПГЕДХТПК, БЧФПНБФЙЮЕУЛЙ РПМХЮЕОЩ Й УПИТБОЕОЩ ЛБЛ ЬЛЪЕНРМСТЩ MySQLCursorBuffered. дМС РПМХЮЕОЙС ДПРПМОЙФЕМШОПК ЙОЖПТНБГЙЙ ПВ ЙУРПМШЪПЧБОЙЙ ЬФЙИ ОБВПТПЧ ТЕЪХМШФБФПЧ РПУНПФТЙФЕ stored_results() .
рТЕДРПМПЦЙН, ЮФП ИТБОЙНБС РТПГЕДХТБ ВЕТЕФ ДЧБ РБТБНЕФТБ, ХНОПЦБЕФ ЪОБЮЕОЙС Й ЧПЪЧТБЭБЕФ ТЕЪХМШФБФ:
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ЧЩРПМОЙФШ multiply() :
Connector/Python 1.2.1 Й ЧЩЫЕ ТБЪТЕЫБЕФ ФЙРБН РБТБНЕФТБ ВЩФШ ПРТЕДЕМЕООЩНЙ. юФПВЩ УДЕМБФШ ЬФП, ПРТЕДЕМЙФЕ РБТБНЕФТ ЛБЛ ЛПТФЕЦ У ДЧХНС РХОЛФБНЙ, УПУФПСЭЙК ЙЪ ЪОБЮЕОЙС РБТБНЕФТБ Й ФЙРБ. рТЕДРПМПЦЙН, ЮФП РТПГЕДХТБ sp1() ЙНЕЕФ ЬФП ПРТЕДЕМЕОЙЕ:
юФПВЩ ЧЩРПМОСФШ ЬФХ РТПГЕДХТХ ПФ Connector/Python, ПРТЕДЕМСС ФЙР ДМС РБТБНЕФТБ OUT :
10.5.3. нЕФПД MySQLCursor.close()
ьФПФ НЕФПД ЪБЛТЩЧБЕФ ЛХТУПТ, РЕТЕЪБЗТХЦБЕФ ЧУЕ ТЕЪХМШФБФЩ Й ЗБТБОФЙТХЕФ, ЮФП Х ПВЯЕЛФБ ЛХТУПТБ ОЕФ УУЩМЛЙ ОБ ПТЙЗЙОБМШОЩК ПВЯЕЛФ УЧСЪЙ.
10.5.4. нЕФПД MySQLCursor.execute()
ьФПФ НЕФПД ЧЩРПМОСЕФ ДБООПЕ ДЕКУФЧЙЕ operation У ВБЪПК ДБООЩИ. рБТБНЕФТЩ ОБКДЕОЩ Ч ЛПТФЕЦЕ ЙМЙ УМПЧБТЕ params Й УЧСЪБОЩ У РЕТЕНЕООЩНЙ Ч ПРЕТБГЙЙ. пРТЕДЕМЙФЕ ЙУРПМШЪПЧБОЙЕ РЕТЕНЕООЩИ Ч УФЙМЕ РБТБНЕФТПЧ %s ЙМЙ %( name )s (ФП ЕУФШ, ЙУРПМШЪХС УФЙМШ format ЙМЙ pyformat ). execute() ЧПЪЧТБЭБЕФ ЙФЕТБФПТ, ЕУМЙ multi = True .
ч Python ЛПТФЕЦ, УПДЕТЦБЭЙК ЕДЙОУФЧЕООХА ЪОБЮЕОЙЕ, ДПМЦЕО ЧЛМАЮБФШ ЪБРСФХА. оБРТЙНЕТ, (‘abc’) ПГЕОЕОП ЛБЛ УЛБМСТ, Ч ФП ЧТЕНС ЛБЛ (‘abc’,) ПГЕОЕОП ЛБЛ ЛПТФЕЦ.
ьФПФ РТЙНЕТ ЧУФБЧМСЕФ ЙОЖПТНБГЙА П ОПЧПН УПФТХДОЙЛЕ, ЪБФЕН ЧЩВЙТБЕФ ДБООЩЕ ДМС ФПЗП ЮЕМПЧЕЛБ. ъБРТПУЩ ЧЩРПМОСАФУС ЛБЛ ПФДЕМШОЩЕ ДЕКУФЧЙС execute() :
ъОБЮЕОЙС ДБООЩИ РТЕПВТБЪПЧЩЧБАФУС РП НЕТЕ ОЕПВИПДЙНПУФЙ ПФ ПВЯЕЛФПЧ Python ДП ЮЕЗП-ФП, ЮФП MySQL РПОЙНБЕФ. ч РТЕДЩДХЭЕН РТЙНЕТЕ ЬЛЪЕНРМСТ datetime.date() РТЕПВТБЪПЧЩЧБЕФУС Ч ‘2012-03-23’ .
еУМЙ multi = True , execute() Ч УПУФПСОЙЙ ЧЩРПМОЙФШ НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ, ПРТЕДЕМЕООЩЕ Ч operation . ьФП ЧПЪЧТБЭБЕФ ЙФЕТБФПТ, ЛПФПТЩК РПЪЧПМСЕФ ПВТБВПФБФШ ТЕЪХМШФБФ ЛБЦДПЗП ЪБРТПУБ. пДОБЛП ЙУРПМШЪПЧБОЙЕ РБТБНЕФТПЧ ОЕ ТБВПФБЕФ ИПТПЫП Ч ЬФПН УМХЮБЕ, Й ПВЩЮОП ИПТПЫБС ЙДЕС ЧЩРПМОЙФШ ЛБЦДЩК ЪБРТПУ УБНПУФПСФЕМШОП.
уМЕДХАЭЙК РТЙНЕТ ЧЩВЙТБЕФ Й ЧУФБЧМСЕФ ДБООЩЕ Ч ПДОПК ПРЕТБГЙЙ execute() Й РПЛБЪЩЧБЕФ ТЕЪХМШФБФ ЛБЦДПЗП ЪБРТПУБ:
еУМЙ УЧСЪШ ЖПТНЙТХЕФУС, ЮФПВЩ РПМХЮЙФШ РТЕДХРТЕЦДЕОЙС, ФП ЧУЕ РТЕДХРТЕЦДЕОЙС, РТПЙЪЧЕДЕООЩЕ ПРЕТБГЙЕК, ДПУФХРОЩ ЮЕТЕЪ НЕФПД MySQLCursor.fetchwarnings().
10.5.5. нЕФПД MySQLCursor.executemany()
ьФПФ НЕФПД ЗПФПЧЙФ operation ДМС ВБЪЩ ДБООЩИ Й ЧЩРПМОСЕФ ЕЗП ДМС ЧУЕИ РПУМЕДПЧБФЕМШОПУФЕК РБТБНЕФТБ ЙМЙ ПФПВТБЦЕОЙК, ОБКДЕООЩИ Ч РПУМЕДПЧБФЕМШОПУФЙ seq_of_params .
ч Python ЛПТФЕЦ, УПДЕТЦБЭЙК ЕДЙОУФЧЕООХА ЪОБЮЕОЙЕ, ДПМЦЕО ЧЛМАЮБФШ ЪБРСФХА. оБРТЙНЕТ, (‘abc’) ПГЕОЕОП ЛБЛ УЛБМСТ, Ч ФП ЧТЕНС ЛБЛ (‘abc’,) ПГЕОЕОП ЛБЛ ЛПТФЕЦ.
ч ВПМШЫЙОУФЧЕ УМХЮБЕЧ НЕФПД executemany() РПЧФПТСЕФ РПУМЕДПЧБФЕМШОПУФШ РБТБНЕФТПЧ, ЛБЦДЩК ТБЪ РЕТЕДБЧБС ФЕЛХЭЙЕ РБТБНЕФТЩ Л НЕФПДХ execute() .
пРФЙНЙЪБГЙС РТЙНЕОСЕФУС ДМС ЧУФБЧПЛ: ЪОБЮЕОЙС ДБООЩИ, ДБООЩЕ РПУМЕДПЧБФЕМШОПУФСНЙ РБТБНЕФТБ, УЛПНРМЕЛФПЧБОЩ, ЙУРПМШЪХС УЙОФБЛУЙУ НОПЗПЛТБФОПК УФТПЛЙ. уМЕДХАЭЙК РТЙНЕТ ЧУФБЧМСЕФ ФТЙ ЪБРЙУЙ:
дМС РТЕДЩДХЭЕЗП РТЙНЕТБ Ч MySQL РПУМБО ФБЛПК INSERT :
у НЕФПДПН executemany() ОЕЧПЪНПЦОП ПРТЕДЕМЙФШ НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ, ЮФПВЩ ЧЩРПМОЙФШ Ч РБТБНЕФТЕ operation . чЩРПМОЕОЙЕ ЬФПЗП РПДОЙНБЕФ ЙУЛМАЮЕОЙЕ InternalError . тБУУНПФТЙФЕ ЙУРПМШЪПЧБОЙЕ execute() У multi=True .
10.5.6. нЕФПД MySQLCursor.fetchall()
нЕФПД РТЙОПУЙФ ЧУЕ (ЙМЙ ЧУЕ ПУФБАЭЙЕУС) УФТПЛЙ ОБВПТБ ТЕЪХМШФБФБ ЪБРТПУБ Й ЧПЪЧТБЭБЕФ УРЙУПЛ ЛПТФЕЦЕК. еУМЙ ВПМШЫЕ УФТПЛ ОЕДПУФХРОП, ЬФП ЧПЪЧТБЭБЕФ РХУФПК УРЙУПЛ.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ РПМХЮЙФШ РЕТЧЩЕ ДЧБ УФТПЛЙ ОБВПТБ ТЕЪХМШФБФПЧ, Б ЪБФЕН МАВЩЕ ПУФБАЭЙЕУС УФТПЛЙ:
оЕПВИПДЙНП РТЙОЕУФЙ ЧУЕ УФТПЛЙ ДМС ФЕЛХЭЕЗП ЪБРТПУБ РТЕЦДЕ, ЮЕН ЧЩРПМОЙФШ ОПЧЩЕ ЪБРТПУЩ, ЙУРПМШЪХС ФХ ЦЕ УБНХА УЧСЪШ.
10.5.7. нЕФПД MySQLCursor.fetchmany()
ьФПФ НЕФПД РТЙОПУЙФ УМЕДХАЭЙК ОБВПТ УФТПЛ ТЕЪХМШФБФБ ЪБРТПУБ Й ЧПЪЧТБЭБЕФ УРЙУПЛ ЛПТФЕЦЕК. еУМЙ ВПМШЫЕ УФТПЛ ОЕДПУФХРОП, ЬФП ЧПЪЧТБЭБЕФ РХУФПК УРЙУПЛ.
лПМЙЮЕУФЧП ЧПЪЧТБЭЕООЩИ УФТПЛ НПЦЕФ ВЩФШ ПРТЕДЕМЕОП, ЙУРПМШЪХС РБТБНЕФТ size , ЛПФПТЩК РП ХНПМЮБОЙА 1. нЕОШЫЕ УФТПЛ ЧПЪЧТБЭЕОП, ЕУМЙ НЕОШЫЕ УФТПЛ ДПУФХРОП, ЮЕН ХЛБЪБОП.
оЕПВИПДЙНП РТЙОЕУФЙ ЧУЕ УФТПЛЙ ДМС ФЕЛХЭЕЗП ЪБРТПУБ РТЕЦДЕ, ЮЕН ЧЩРПМОЙФШ ОПЧЩЕ ЪБРТПУЩ, ЙУРПМШЪХС ФХ ЦЕ УБНХА УЧСЪШ.
10.5.8. нЕФПД MySQLCursor.fetchone()
ьФПФ НЕФПД УМЕДХАЭХА УФТПЛХ ОБВПТБ ТЕЪХМШФБФБ ЪБРТПУБ Й ЧПЪЧТБЭБЕФ ЕДЙОУФЧЕООХА РПУМЕДПЧБФЕМШОПУФШ ЙМЙ None , ЕУМЙ ВПМШЫЕ УФТПЛ ОЕДПУФХРОП. рП ХНПМЮБОЙА ЧПЪЧТБЭЕООЩК ЛПТФЕЦ УПУФПЙФ ЙЪ ДБООЩИ, ЧПЪЧТБЭЕООЩИ УЕТЧЕТПН MySQL, РТЕПВТБЪПЧБООЩИ Ч ПВЯЕЛФЩ Python. еУМЙ ЛХТУПТ УЩТПК, ОЙЛБЛПЕ РТЕПВТБЪПЧБОЙЕ ОЕ РТПЙУИПДЙФ, РПУНПФТЙФЕ ТБЪДЕМ 10.6.2.
нЕФПД fetchone() ЙУРПМШЪХЕФУС fetchall() Й fetchmany() . ьФП ФБЛЦЕ ЙУРПМШЪХЕФУС, ЛПЗДБ ЛХТУПТ ЙУРПМШЪХЕФУС Ч ЛБЮЕУФЧЕ ЙФЕТБФПТБ.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ ДЧБ ЬЛЧЙЧБМЕОФОЩИ УРПУПВБ ПВТБВПФБФШ ТЕЪХМШФБФ ЪБРТПУБ. рЕТЧПЕ ЙУРПМШЪПЧБОЙЕ fetchone() Ч ГЙЛМЕ while , ЧФПТПЕ ЙУРПМШЪПЧБОЙЕ ЛХТУПТБ ЛБЛ ЙФЕТБФПТБ:
оЕПВИПДЙНП РТЙОЕУФЙ ЧУЕ УФТПЛЙ ДМС ФЕЛХЭЕЗП ЪБРТПУБ РТЕЦДЕ, ЮЕН ЧЩРПМОЙФШ ОПЧЩЕ ЪБРТПУЩ, ЙУРПМШЪХС ФХ ЦЕ УБНХА УЧСЪШ.
10.5.9. нЕФПД MySQLCursor.fetchwarnings()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ УРЙУПЛ ЛПТФЕЦЕК, УПДЕТЦБЭЙИ РТЕДХРТЕЦДЕОЙС, РТПЙЪЧЕДЕООЩЕ ТБОЕЕ ЧЩРПМОЕООПК ПРЕТБГЙЕК. юФПВЩ ХУФБОПЧЙФШ, РПМХЮБФШ МЙ РТЕДХРТЕЦДЕОЙС, ЙУРПМШЪХКФЕ УЧПКУФЧП УПЕДЙОЕОЙС get_warnings .
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ SELECT , ЛПФПТЩК РТПЙЪЧПДЙФ РТЕДХРТЕЦДЕОЙЕ:
лПЗДБ РТЕДХРТЕЦДЕОЙС РТПЙЪЧЕДЕОЩ, ЧПЪНПЦОП РПДОСФШ ПЫЙВЛЙ ЧНЕУФП ЬФПЗП, ЙУРПМШЪХС УЧПКУФЧП УПЕДЙОЕОЙС raise_on_warnings .
10.5.10. нЕФПД MySQLCursor.stored_results()
ьФПФ НЕФПД ЧПЪЧТБЭБЕФ УРЙУПЛ ЙФЕТБФПТПЧ, ЛПФПТЩК НПЦЕФ ЙУРПМШЪПЧБФШУС, ЮФПВЩ ПВТБВПФБФШ ОБВПТЩ ТЕЪХМШФБФПЧ, РТПЙЪЧЕДЕООЩЕ ИТБОЙНПК РТПГЕДХТПК, ЧЩРПМОЕООПК, ЙУРПМШЪХС НЕФПД callproc(). оБВПТЩ ТЕЪХМШФБФПЧ ПУФБАФУС ДПУФХРОЩНЙ, РПЛБ ЧЩ ОЕ ЙУРПМШЪХЕФЕ ЛХТУПТ, ЮФПВЩ ЧЩРПМОЙФШ ДТХЗХА ПРЕТБГЙА ЙМЙ ЧЩЪЧБФШ ДТХЗХА ИТБОЙНХА РТПГЕДХТХ.
уМЕДХАЭЙК РТЙНЕТ ЧЩРПМОСЕФ ИТБОЙНХА РТПГЕДХТХ, ЛПФПТБС РТПЙЪЧПДЙФ ДЧБ ОБВПТБ ТЕЪХМШФБФПЧ, ЪБФЕН ЙУРПМШЪХЕФ stored_results() , ЮФПВЩ РПМХЮЙФШ ЙИ:
10.5.11. уЧПКУФЧП MySQLCursor.column_names
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЙНЕОБ УФПМВГПЧ ОБВПТБ ТЕЪХМШФБФПЧ ЛБЛ РПУМЕДПЧБФЕМШОПУФШ УФТПЛ Unicode.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ УПЪДБФШ УМПЧБТШ ЙЪ ЛПТФЕЦБ, УПДЕТЦБЭЕЗП ДБООЩЕ У ЙУРПМШЪПЧБОЙЕН ЛМАЮЕК column_names :
бМШФЕТОБФЙЧОП, У Connector/Python 2.0.0 НПЦОП РТЙОЕУФЙ УФТПЛЙ ЛБЛ УМПЧБТЙ ОЕРПУТЕДУФЧЕООП, РПУНПФТЙФЕ ТБЪДЕМ 10.6.4.
10.5.12. уЧПКУФЧП MySQLCursor.description
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ УРЙУПЛ ЛПТФЕЦЕК, ПРЙУЩЧБАЭЙИ ЛПМПОЛЙ Ч ОБВПТЕ ТЕЪХМШФБФПЧ. лБЦДЩК ЛПТФЕЦ Ч УРЙУЛЕ УПДЕТЦЙФ ЪОБЮЕОЙС УМЕДХАЭЙН ПВТБЪПН:
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ЙОФЕТРТЕФЙТПЧБФШ ЛПТФЕЦЙ description :
чЩЧПД РПИПЦ ОБ ЬФП:
column_flags ЬФП ЬЛЪЕНРМСТ ЛМБУУБ constants.FieldFlag . юФПВЩ ЧЙДЕФШ, ЛБЛ ЙОФЕТРТЕФЙТПЧБФШ ЕЗП, УДЕМБКФЕ ЬФП:
10.5.13. уЧПКУФЧП MySQLCursor.lastrowid
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЪОБЮЕОЙЕ, РТПЙЪЧЕДЕООПЕ ДМС УФПМВГБ AUTO_INCREMENT РПУМЕДОЙН INSERT ЙМЙ UPDATE , ЙМЙ None , ЛПЗДБ ОЕФ ФБЛПЗП ДПУФХРОПЗП ЪОБЮЕОЙС. оБРТЙНЕТ, ЕУМЙ ЧЩ УЛПНБОДХЕФЕ INSERT ОБ ФБВМЙГЕ, ЛПФПТБС УПДЕТЦЙФ УФПМВЕГ AUTO_INCREMENT , lastrowid ЧЕТОЕФ ЪОБЮЕОЙЕ AUTO_INCREMENT ДМС ОПЧПК УФТПЛЙ. дМС РТЙНЕТБ РПУНПФТЙФЕ ТБЪДЕМ 5.3 .
уЧПКУФЧП lastrowid РПИПЦЕ ОБ ЖХОЛГЙА C API mysql_insert_id() , УН. mysql_insert_id().
10.5.14. уЧПКУФЧП MySQLCursor.rowcount
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ ЛПМЙЮЕУФЧП УФТПЛ, ЧПЪЧТБЭЕООЩИ ДМС SELECT ЙМЙ ЛПМЙЮЕУФЧП УФТПЛ, ЪБФТПОХФЩИ ЪБРТПУБНЙ DML, ОБРТЙНЕТ, INSERT ЙМЙ UPDATE . дМС РТЙНЕТБ РПУНПФТЙФЕ ТБЪДЕМ 10.5.4 .
дМС ОЕВХЖЕТЙЪЙТПЧБООЩИ ЛХТУПТПЧ ОЕ НПЦЕФ ВЩФШ ЙЪЧЕУФОП ЛПМЙЮЕУФЧП УФТПЛ РТЕЦДЕ, ЮЕН УФТПЛЙ ВЩМЙ РТЙОЕУЕОЩ. ч ЬФПН УМХЮБЕ ЛПМЙЮЕУФЧП УФТПЛ -1 ОЕНЕДМЕООП РПУМЕ ЧЩРПМОЕОЙС ЪБРТПУБ Й ХЧЕМЙЮЕОП, РП НЕТЕ РПМХЮЕОЙС УФТПЛ.
уЧПКУФЧП rowcount БОБМПЗЙЮОП ЖХОЛГЙЙ C API mysql_affected_rows() , УН. mysql_affected_rows().
10.5.15. уЧПКУФЧП MySQLCursor.statement
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧПЪЧТБЭБЕФ РПУМЕДОЙК ЧЩРПМОЕООЩК ЪБРТПУ ЛБЛ РПУМЕДПЧБФЕМШОПУФШ. уЧПКУФЧП statement НПЦЕФ ВЩФШ РПМЕЪОП ДМС ПФМБДЛЙ Й РПЛБЪБ, ЮФП РПУМБМЙ Ч УЕТЧЕТ MySQL.
рПУМЕДПЧБФЕМШОПУФШ НПЦЕФ УПДЕТЦБФШ НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ, ЕУМЙ РПУМЕДПЧБФЕМШОПУФШ НОПЗПЛТБФОЩИ ЪБРТПУПЧ ВЩМБ ЧЩРПМОЕОБ. ьФП РТПЙУИПДЙФ ДМС execute() У multi=True . ч ЬФПН УМХЮБЕ УЧПКУФЧП statement УПДЕТЦЙФ ЧУА РПУМЕДПЧБФЕМШОПУФШ ЪБРТПУПЧ Й ЧЩЪПЧ execute() ЧЕТОЕФ ЙФЕТБФПТ, ЛПФПТЩК НПЦЕФ ЙУРПМШЪПЧБФШУС, ЮФПВЩ ПВТБВПФБФШ УМЕДУФЧЙС ПФДЕМШОЩИ ЪБРТПУПЧ. уЧПКУФЧП statement ДМС ЬФПЗП ЙФЕТБФПТБ РПЛБЪЩЧБЕФ РПУМЕДПЧБФЕМШОПУФЙ ЪБРТПУБ ДМС ПФДЕМШОЩИ ЪБРТПУПЧ.
10.5.16. уЧПКУФЧП MySQLCursor.with_rows
ьФП УЧПКУФЧП ФПМШЛП ДМС ЮФЕОЙС ЧЕТОЕФ True ЙМЙ False , ЮФПВЩ ХЛБЪБФШ, РТПЙЪЧЕМБ МЙ РПУМЕДОЙК ТБЪ ЧЩРПМОЕООБС ПРЕТБГЙС УФТПЛЙ.
уЧПКУФЧП with_rows РПМЕЪОП, ЛПЗДБ ОЕПВИПДЙНП ПРТЕДЕМЙФШ, РТПЙЪЧПДЙФ МЙ ЪБРТПУ ОБВПТ ТЕЪХМШФБФПЧ Й РПМХЮЙФШ УФТПЛЙ. уМЕДХАЭЙК РТЙНЕТ РПМХЮБЕФ УФТПЛЙ, ЧПЪЧТБЭЕООЩЕ SELECT , ОП ФПМШЛП ЪБФТПОХФЩЕ УФТПЛЙ ПГЕОЙЧБАФУС ДМС UPDATE :
10.6. уХВЛМБУУЩ cursor.MySQLCursor
лМБУУЩ ЛХТУПТБ, ПРЙУБООЩЕ Ч УМЕДХАЭЙИ ТБЪДЕМБИ, ОБУМЕДХАФ ПФ ЛМБУУБ MySQLCursor , ЛПФПТЩК ПРЙУБО Ч ТБЪДЕМЕ 10.5.
10.6.1. лМБУУ cursor.MySQLCursorBuffered
лМБУУ MySQLCursorBuffered ОБУМЕДХЕФ ПФ MySQLCursor .
рПУМЕ ЧЩРПМОЕОЙС ЪБРТПУБ ЛХТУПТ MySQLCursorBuffered РПМХЮБЕФ ЧЕУШ ОБВПТ ТЕЪХМШФБФПЧ ПФ УЕТЧЕТБ Й ВХЖЕТЙЪХЕФ УФТПЛЙ.
дМС ЪБРТПУПЧ, ЧЩРПМОЕООЩИ, ЙУРПМШЪХС ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, РПМХЮБАЭЙЕ УФТПЛЙ НЕФПДЩ, ФБЛЙЕ ЛБЛ fetchone() , ЧЕТОХФ УФТПЛЙ ЙЪ ОБВПТБ ВХЖЕТЙЪЙТПЧБООЩИ УФТПЛ. дМС ОЕВХЖЕТЙЪЙТПЧБООЩИ ЛХТУПТПЧ УФТПЛЙ ОЕ РПМХЮЕОЩ ПФ УЕТЧЕТБ, РПЛБ НЕФПД, РПМХЮБАЭЙК УФТПЛЙ, ОЕ ЧЩЪЩЧБАФ. ч ЬФПН УМХЮБЕ, ОЕУПНОЕООП, ОЕПВИПДЙНП ВХДЕФ РПМХЮЙФШ ЧУЕ УФТПЛЙ ОБВПТБ ТЕЪХМШФБФПЧ РТЕЦДЕ, ЮЕН ЧЩРПМОЙФШ МАВЩЕ ДТХЗЙЕ ЪБРТПУЩ ОБ ФПК ЦЕ УБНПК УЧСЪЙ, ЙМЙ ВХДЕФ РПДОСФП ЙУЛМАЮЕОЙЕ InternalError (Unread result found).
MySQLCursorBuffered НПЦЕФ ВЩФШ РПМЕЪОЩН Ч УЙФХБГЙСИ, ЗДЕ НОПЗПЛТБФОЩЕ ЪБРТПУЩ У ОЕВПМШЫЙНЙ ОБВПТБНЙ ТЕЪХМШФБФПЧ ДПМЦОЩ ВЩФШ ПВЯЕДЙОЕОЩ ЙМЙ ЧЩЮЙУМЕОЩ ДТХЗ У ДТХЗПН.
юФПВЩ УПЪДБФШ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, ЙУРПМШЪХКФЕ БТЗХНЕОФ buffered , ЧЩЪЩЧБС НЕФПД УЧСЪЙ cursor() . бМШФЕТОБФЙЧОП, ЮФПВЩ УДЕМБФШ ЧУЕ ЛХТУПТЩ, УПЪДБООЩЕ ЙЪ УЧСЪЙ, ВХЖЕТЙЪПЧБООЩНЙ РП ХНПМЮБОЙА, ЙУРПМШЪХКФЕ РБТБНЕФТ УЧСЪЙ buffered .
дМС УМХЮБС РТБЛФЙЮЕУЛПЗП РТЙНЕОЕОЙС РПУНПФТЙФЕ ТБЪДЕМ 6.1.
10.6.2. лМБУУ cursor.MySQLCursorRaw
лМБУУ MySQLCursorRaw ХОБУМЕДПЧБО ПФ MySQLCursor .
лХТУПТ MySQLCursorRaw РТПРХУЛБЕФ РТЕПВТБЪПЧБОЙЕ ПФ ФЙРПЧ ДБООЩИ MySQL ДП ФЙРПЧ Python, ЛПЗДБ РПМХЮБЕФ УФТПЛЙ. уЩТПК ЛХТУПТ ПВЩЮОП ЙУРПМШЪХЕФУС, ЮФПВЩ РПМХЮЙФШ МХЮЫХА РТПЙЪЧПДЙФЕМШОПУФШ ЙМЙ ЛПЗДБ ЧЩ ИПФЙФЕ УДЕМБФШ РТЕПВТБЪПЧБОЙЕ УБНЙ.
юФПВЩ УПЪДБФШ УЩТПК ЛХТУПТ, ЙУРПМШЪХКФЕ РБТБНЕФТ raw , ЧЩЪЩЧБС НЕФПД УЧСЪЙ cursor() . бМШФЕТОБФЙЧОП, ЮФПВЩ УДЕМБФШ ЧУЕ ЛХТУПТЩ, УПЪДБООЩЕ ЙЪ УЧСЪЙ, УЩТЩНЙ РП ХНПМЮБОЙА, ЙУРПМШЪХКФЕ РБТБНЕФТ УЧСЪЙ raw .
10.6.3. лМБУУ cursor.MySQLCursorBufferedRaw
лМБУУ MySQLCursorBufferedRaw ХОБУМЕДПЧБО ПФ MySQLCursor .
лХТУПТ MySQLCursorBufferedRaw РПИПЦ ОБ MySQLCursorRaw , ОП ВХЖЕТЙЪПЧБО: РПУМЕ ЧЩРПМОЕОЙС ЪБРТПУБ ЬФП РПМХЮБЕФ ЧЕУШ ОБВПТ ТЕЪХМШФБФПЧ ПФ УЕТЧЕТБ Й ВХЖЕТЙЪХЕФ УФТПЛЙ. дМС РПМХЮЕОЙС ЙОЖПТНБГЙЙ П РПУМЕДУФЧЙСИ ВХЖЕТЙЪПЧБОЙС РПУНПФТЙФЕ ТБЪДЕМ 10.6.1.
юФПВЩ УПЪДБФШ ВХЖЕТЙЪЙТПЧБООЩК УЩТПК ЛХТУПТ, ЙУРПМШЪХКФЕ НЕФПД raw Й РБТБНЕФТ buffered , ЛПЗДБ ЧЩЪЩЧБЕФЕ НЕФПД УПЕДЙОЕОЙС cursor() . бМШФЕТОБФЙЧОП, ЮФПВЩ УДЕМБФШ ЧУЕ ЛХТУПТЩ УПЪДБООЩНЙ УЩТЩНЙ Й ВХЖЕТЙЪПЧБООЩНЙ РП ХНПМЮБОЙА, ЙУРПМШЪХКФЕ РБТБНЕФТЩ УПЕДЙОЕОЙС raw Й buffered .
10.6.4. лМБУУ cursor.MySQLCursorDict
лМБУУ MySQLCursorDict ХОБУМЕДПЧБО ПФ MySQLCursor . ьФПФ ЛМБУУ ДПУФХРЕО У Connector/Python 2.0.0.
лХТУПТ MySQLCursorDict ЧПЪЧТБЭБЕФ ЛБЦДХА УФТПЛХ ЛБЛ УМПЧБТШ. лМАЮЙ ДМС ЛБЦДПЗП ПВЯЕЛФБ УМПЧБТС ЬФП ЙНЕОБ УФПМВГПЧ ТЕЪХМШФБФБ MySQL.
рТЕДЩДХЭЙК ЛПД РТПЙЪЧПДЙФ ФБЛПК ЧЩЧПД:
нПЦЕФ ВЩФШ ХДПВОП РЕТЕДБФШ УМПЧБТШ Ч format() :
10.6.5. лМБУУ cursor.MySQLCursorBufferedDict
лМБУУ MySQLCursorBufferedDict ХОБУМЕДПЧБО ПФ MySQLCursor . ьФПФ ЛМБУУ ДПУФХРЕО У Connector/Python 2.0.0.
лХТУПТ MySQLCursorBufferedDict БОБМПЗЙЮЕО MySQLCursorDict , ОП ВХЖЕТЙЪПЧБО: РПУМЕ ЧЩРПМОЕОЙС ЪБРТПУБ ЬФП РПМХЮБЕФ ЧЕУШ ОБВПТ ТЕЪХМШФБФПЧ ПФ УЕТЧЕТБ Й ВХЖЕТЙЪХЕФ УФТПЛЙ. дМС РПМХЮЕОЙС ЙОЖПТНБГЙЙ П РПУМЕДУФЧЙСИ ВХЖЕТЙЪПЧБОЙС РПУНПФТЙФЕ ТБЪДЕМ 10.6.1.
юФПВЩ РПМХЮЙФШ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ УМПЧБТЙ, ДПВБЧШФЕ РБТБНЕФТ buffered , УПЪДМБЧБС ОПЧЩК ЛХТУПТ УМПЧБТС:
10.6.6. лМБУУ cursor.MySQLCursorNamedTuple
лМБУУ MySQLCursorNamedTuple ХОБУМЕДПЧБО ПФ MySQLCursor . ьФПФ ЛМБУУ ДПУФХРЕО У Connector/Python 2.0.0.
лХТУПТ MySQLCursorNamedTuple ЧПЪЧТБЭБЕФ ЛБЦДХА УФТПЛХ ЛБЛ ОБЪЧБООЩК ЛПТФЕЦ. рТЙЪОБЛЙ ДМС ЛБЦДПЗП ПВЯЕЛФБ ОБЪЧБООПЗП ЛПТФЕЦБ ЬФП ЙНЕОБ УФПМВГПЧ ТЕЪХМШФБФБ MySQL.
10.6.7. лМБУУ cursor.MySQLCursorBufferedNamedTuple
лМБУУ MySQLCursorBufferedNamedTuple ХОБУМЕДПЧБО ПФ MySQLCursor . ьФПФ ЛМБУУ ДПУФХРЕО У Connector/Python 2.0.0.
лХТУПТ MySQLCursorBufferedNamedTuple БОБМПЗЙЮЕО MySQLCursorNamedTuple , ОП ВХЖЕТЙЪПЧБО: РПУМЕ ЧЩРПМОЕОЙС ЪБРТПУБ ЬФП РПМХЮБЕФ ЧЕУШ ОБВПТ ТЕЪХМШФБФПЧ ПФ УЕТЧЕТБ Й ВХЖЕТЙЪХЕФ УФТПЛЙ. дМС РПМХЮЕОЙС ЙОЖПТНБГЙЙ П РПУМЕДУФЧЙСИ ВХЖЕТЙЪПЧБОЙС РПУНПФТЙФЕ ТБЪДЕМ 10.6.1.
юФПВЩ РПМХЮЙФШ ВХЖЕТЙЪЙТПЧБООЩК ЛХТУПТ, ЛПФПТЩК ЧПЪЧТБЭБЕФ ОБЪЧБООЩЕ ЛПТФЕЦЙ, ДПВБЧШФЕ РБТБНЕФТ buffered РТЙ УПЪДБОЙЙ ОПЧПЗП ЛХТУПТБ ОБЪЧБООПЗП ЛПТФЕЦБ:
10.6.8. лМБУУ cursor.MySQLCursorPrepared
лМБУУ MySQLCursorPrepared ХОБУМЕДПЧБО ПФ MySQLCursor .
ьФПФ ЛМБУУ ДПУФХРЕО У Connector/Python 1.1.0. тБУЫЙТЕОЙЕ C РПДДЕТЦЙЧБЕФ ЕЗП У Connector/Python 8.0.17.
ч MySQL ЕУФШ ДЧБ УРПУПВБ ЧЩРПМОЙФШ РПДЗПФПЧМЕООЩК ЪБРТПУ:
йУРПМШЪПЧБФШ ЪБРТПУЩ PREPARE Й EXECUTE .
йУРПМШЪХКФЕ ДЧПЙЮОЩК РТПФПЛПМ ЛМЙЕОФ-УЕТЧЕТ, ЮФПВЩ РПУМБФШ Й РПМХЮЙФШ ДБООЩЕ. юФПВЩ ОЕПДОПЛТБФОП ЧЩРПМОЙФШ ФПФ ЦЕ УБНЩК ЪБРТПУ У ТБЪМЙЮОЩНЙ ДБООЩНЙ ДМС ТБЪМЙЮОПЗП ЧЩРПМОЕОЙС, ЬФП ВПМЕЕ ЬЖЖЕЛФЙЧОП, ЮЕН ЙУРПМШЪПЧБОЙЕ PREPARE Й EXECUTE . дМС РПМХЮЕОЙС ЙОЖПТНБГЙЙ П РТПФПЛПМЕ ДЧПЙЮОПК УЙОИТПООПК РЕТЕДБЮЙ ДБООЩИ УН. C API Prepared Statements.
ч Connector/Python ЕУФШ ДЧБ УРПУПВБ УПЪДБФШ ЛХТУПТ, ЛПФПТЩК РПЪЧПМСЕФ ЧЩРПМОЕОЙЕ РПДЗПФПЧМЕООЩИ ЪБРТПУПЧ, ЙУРПМШЪХС РТПФПЛПМ ДЧПЙЮОПК УЙОИТПООПК РЕТЕДБЮЙ ДБООЩИ. ч ПВПЙИ УМХЮБСИ НЕФПД cursor() ПВЯЕЛФБ УЧСЪЙ ЧПЪЧТБЭБЕФ ПВЯЕЛФ MySQLCursorPrepared :
вПМЕЕ РТПУФПК УЙОФБЛУЙУ ЙУРПМШЪХЕФ РБТБНЕФТ prepared=True НЕФПДБ cursor() . ьФПФ УЙОФБЛУЙУ ДПУФХРЕО У Connector/Python 1.1.2.
бМШФЕТОБФЙЧОП, УПЪДБКФЕ ЬЛЪЕНРМСТ ЛМБУУБ MySQLCursorPrepared , ЙУРПМШЪХС БТЗХНЕОФ cursor_class НЕФПДБ cursor() . ьФПФ УЙОФБЛУЙУ ДПУФХРЕО У Connector/Python 1.1.0.
лХТУПТ, РПТПЦДЕООЩК ПФ ЛМБУУБ MySQLCursorPrepared , ТБВПФБЕФ ФБЛ:
ч РЕТЧЩК ТБЪ ЧЩ РЕТЕДБЕФЕ ЪБРТПУ НЕФПДХ execute() ЛХТУПТБ, ЬФП ЗПФПЧЙФ ЪБРТПУ. дМС РПУМЕДХАЭЙИ ЧЩЪПЧПЧ execute() ЖБЪБ РПДЗПФПЧЛЙ РТПРХУЛБЕФУС, ЕУМЙ ЪБРТПУ ФПФ ЦЕ УБНЩК
нЕФПД execute() ВЕТЕФ ДПРПМОЙФЕМШОЩК ЧФПТПК БТЗХНЕОФ, УПДЕТЦБЭЙК УРЙУПЛ ЪОБЮЕОЙК ДБООЩИ, ЮФПВЩ УЧСЪБФШ У НБТЛЕТБНЙ РБТБНЕФТБ Ч ЪБРТПУЕ. еУМЙ БТЗХНЕОФ УРЙУЛБ РТЙУХФУФЧХЕФ, ДПМЦОП ВЩФШ ПДОП ЪОБЮЕОЙЕ ОБ НБТЛЕТ РБТБНЕФТБ.
%s Ч ТБНЛБИ ЪБРТПУБ ЬФП НБТЛЕТ РБТБНЕФТБ. оЕ РПНЕЭБКФЕ ПФНЕФЛЙ ГЙФБФЩ ЧПЛТХЗ НБТЛЕТПЧ РБТБНЕФТБ.
дМС РЕТЧПЗП ЧЩЪПЧБ execute() ЛХТУПТ ЗПФПЧЙФ ЪБРТПУ. еУМЙ ДБООЩЕ ДБОЩ Ч ФПН ЦЕ УБНПН ЧЩЪПЧЕ, ПОЙ ФБЛЦЕ ЧЩРПМОСАФ ЪБРТПУ Й ОЕПВИПДЙНП РПМХЮЙФШ ДБООЩЕ.
дМС РПУМЕДХАЭЕЗП ЧЩЪПЧБ execute() , ЛПФПТЩК РЕТЕДБЕФ ФПФ ЦЕ УБНЩК SQL-ПРЕТБФПТ, ЛХТУПТ РТПРХУЛБЕФ ЖБЪХ РПДЗПФПЧЛЙ.
рПДЗПФПЧМЕООЩЕ ЪБРТПУЩ, ЧЩРПМОЕООЩЕ У MySQLCursorPrepared , НПЗХФ ЙУРПМШЪПЧБФШ УФЙМШ РБТБНЕФТПЧ format ( %s ) ЙМЙ qmark ( ? ). ьФП ПФМЙЮБЕФУС ПФ ОЕРПДЗПФПЧМЕООЩИ ЪБРТПУПЧ, ЧЩРПМОЕООЩИ У MySQLCursor , ЛПФПТЩЕ НПЗХФ ЙУРПМШЪПЧБФШ УФЙМШ РБТБНЕФТПЧ format ЙМЙ pyformat .
юФПВЩ ЙУРПМШЪПЧБФШ НОПЗПЮЙУМЕООЩЕ РПДЗПФПЧМЕООЩЕ ЪБРТПУЩ ПДОПЧТЕНЕООП, УПЪДБКФЕ НОПЗПЛТБФОЩЕ ЛХТУПТЩ ПФ ЛМБУУБ MySQLCursorPrepared .
х РТПФПЛПМБ MySQL ЛМЙЕОФ-УЕТЧЕТ ЕУФШ ПРГЙС РПУМБФШ РПДЗПФПЧМЕООЩЕ РБТБНЕФТЩ ПРЕТБФПТПЧ ЮЕТЕЪ ЛПНБОДХ COM_STMT_SEND_LONG_DATA . юФПВЩ ЙУРПМШЪПЧБФШ ЬФП ЙЪ УЛТЙРФБ Connector/Python, РПЫМЙФЕ РБТБНЕФТ Ч ЪБРТПУЕ, ЙУРПМШЪХС ЙОФЕТЖЕКУ IOBase . рТЙНЕТ:
10.7. лМБУУ constants.ClientFlag
ьФПФ ЛМБУУ РТЕДПУФБЧМСЕФ ПРТЕДЕМЕОЙЕ ЛПОУФБОФ ЖМБЗПЧ ЛМЙЕОФБ MySQL, ЛПФПТЩЕ НПЗХФ ЙУРПМШЪПЧБФШУС, ЛПЗДБ УЧСЪШ ХУФБОБЧМЙЧБЕФУС, ЮФПВЩ ЖПТНЙТПЧБФШ УЕУУЙА. лМБУУ ClientFlag ДПУФХРЕО, ЙНРПТФЙТХС mysql.connector .
ClientFlag ОЕ НПЦЕФ УПЪДБЧБФШ ЬЛЪЕНРМСТЩ.
10.8. лМБУУ constants.FieldType
ьФПФ ЛМБУУ ПВЕУРЕЮЙЧБЕФ ЧУЕ РПДДЕТЦБООЩЕ РПМС MySQL ЙМЙ ФЙРЩ ДБООЩИ. пОЙ НПЗХФ ВЩФШ РПМЕЪОЩНЙ, ЙНЕС ДЕМП У ОЕПВТБВПФБООЩНЙ ДБООЩНЙ ЙМЙ ПРТЕДЕМСС ЧБЫЙ УПВУФЧЕООЩЕ ЛПОЧЕТФЕТЩ. фЙР РПМС ИЪТБОЙФУС У ЛХТУПТПН Ч ПРЙУБОЙЙ ДМС ЛБЦДПЗП УФПМВГБ.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ОБРЕЮБФБФШ ОБЪЧБОЙЕ ФЙРБ ДБООЩИ ДМС ЛБЦДПЗП УФПМВГБ Ч ОБВПТЕ ТЕЪХМШФБФПЧ.
FieldType ОЕ НПЦЕФ УПЪДБЧБФШ ЬЛЪЕНРМСТЩ.
10.9. лМБУУ constants.SQLMode
ьФПФ ЛМБУУ РТЕДПУФБЧМСЕФ ЧУЕ ЙЪЧЕУФОЩЕ ТЕЦЙНЩ SQL. ьФП ЗМБЧОЩН ПВТБЪПН ЙУРПМШЪХЕФУС, ХУФБОБЧМЙЧБС ТЕЦЙНЩ SQL ЧП ЧТЕНС УЧСЪЙ, ЙУРПМШЪХС УЧПКУФЧП УЧСЪЙ sql_mode , УН. ТБЪДЕМ 10.2.47.
лМБУУ SQLMode ОЕ НПЦЕФ УПЪДБЧБФШ ЬЛЪЕНРМСТЩ.
10.10. лМБУУ constants.CharacterSet
ьФПФ ЛМБУУ ПВЕУРЕЮЙЧБЕФ ЧУЕ ЙЪЧЕУФОЩЕ ОБВПТЩ УЙНЧПМПЧ MySQL Й ЙИ УПРПУФБЧМЕОЙС РП ХНПМЮБОЙА. дМС РТЙНЕТПЧ РПУНПФТЙФЕ ТБЪДЕМ 10.2.31.
лМБУУ CharacterSet ОЕ НПЦЕФ УПЪДБЧБФШ ЬЛЪЕНРМСТЩ.
10.11. лМБУУ constants.RefreshOption
ьФПФ ЛМБУУ ЧЩРПМОСЕФ ТБЪМЙЮОЩЕ ПРЕТБГЙЙ РП УВТПУХ.
пУЧЕЦЙФШ ФБВМЙГЩ РТЙЧЙМЕЗЙК, БОБМПЗЙЮОП FLUSH PRIVILEGES .
уВТПУЙФШ ЦХТОБМЩ ЛБЛ FLUSH LOGS .
уВТПУЙФШ ЛЬЫ ФБВМЙГ ЛБЛ FLUSH TABLES .
уВТПУЙФШ ЛЬЫ ИПУФБ ЛБЛ FLUSH HOSTS .
уВТПУЙФШ РЕТЕНЕООЩЕ УФБФХУБ БОБМПЗЙЮОП FLUSH STATUS .
уВТПУЙФШ ЛЬЫ РПФПЛПЧ.
оБ РПДЮЙОЕООПН УЕТЧЕТЕ ТЕРМЙЛБГЙЙ УВТПУЙФШ ЙОЖПТНБГЙА П ЗМБЧОПН УЕТЧЕТЕ Й РЕТЕЪБРХУФЙФШ РПДЮЙОЕООПЗП БОБМПЗЙЮОП RESET SLAVE .
10.12. пЫЙВЛЙ Й ЙУЛМАЮЕОЙС
нПДХМШ mysql.connector.errors ПРТЕДЕМСЕФ ЛМБУУЩ ЙУЛМАЮЕОЙК ДМС ПЫЙВПЛ Й РТЕДХРТЕЦДЕОЙК, РПДОСФЩИ MySQL Connector/Python. вПМШЫЙОУФЧП ЛМБУУПЧ, ПРТЕДЕМЕООЩИ Ч ЬФПН НПДХМЕ, ДПУФХРОП, ЛПЗДБ ЧЩ ЙНРПТФЙТХЕФЕ mysql.connector .
лМБУУЩ ЙУЛМАЮЕОЙК, ПРТЕДЕМЕООЩЕ Ч ЬФПН НПДХМЕ ЗМБЧОЩН ПВТБЪПН, УМЕДХАФ УРЕГЙЖЙЛБГЙЙ Python Database API Specification v2.0 (PEP 249). дМС ОЕЛПФПТЩИ ЛМЙЕОФПЧ MySQL ЙМЙ ПЫЙВПЛ УЕТЧЕТБ ОЕ ЧУЕЗДБ СУОП, ЛПФПТПЕ ЙУЛМАЮЕОЙЕ РПДОСФШ.
пЫЙВЛЙ MySQL Server ПФПВТБЦЕОЩ ОБ ЙУЛМАЮЕОЙС Python ОБ ПУОПЧЕ ЙИ ЪОБЮЕОЙС SQLSTATE (УН. Server Error Message Reference). уМЕДХАЭБС ФБВМЙГБ РПЛБЪЩЧБЕФ ЛМБУУЩ SQLSTATE Й ЙУЛМАЮЕОЙС РПДОЙНБЕНЩЕ Connector/Python. пДОБЛП, ЧПЪНПЦОП РЕТЕУНПФТЕФШ, ЛБЛПЕ ЙУЛМАЮЕОЙЕ РПДОСФП ДМС ЛБЦДПК ПЫЙВЛЙ УЕТЧЕТБ. йУЛМАЮЕОЙЕ РП ХНПМЮБОЙА DatabaseError .
фБВМЙГБ 10.1. пФПВТБЦЕОЙЕ ПЫЙВПЛ УЕТЧЕТБ Л ЙУЛМАЮЕОЙСН Python
лМБУУ SQLSTATE | йУЛМАЮЕОЙЕ Connector/Python |
---|---|
02 | DataError |
02 | DataError |
07 | DatabaseError |
08 | OperationalError |
0A | NotSupportedError |
21 | DataError |
22 | DataError |
23 | IntegrityError |
24 | ProgrammingError |
25 | ProgrammingError |
26 | ProgrammingError |
27 | ProgrammingError |
28 | ProgrammingError |
2A | ProgrammingError |
2B | DatabaseError |
2C | ProgrammingError |
2D | DatabaseError |
2E | DatabaseError |
33 | DatabaseError |
34 | ProgrammingError |
35 | ProgrammingError |
37 | ProgrammingError |
3C | ProgrammingError |
3D | ProgrammingError |
3F | ProgrammingError |
40 | InternalError |
42 | ProgrammingError |
44 | InternalError |
HZ | OperationalError |
XA | IntegrityError |
0K | OperationalError |
HY | DatabaseError |
10.12.1. нПДХМШ errorcode
ьФПФ НПДХМШ УПДЕТЦЙФ ЛПДЩ ПЫЙВПЛ ЛМЙЕОФБ Й УЕТЧЕТБ MySQL, ПРТЕДЕМЕООЩЕ ЛБЛ БФТЙВХФЩ НПДХМС У ЛПДПН ПЫЙВЛЙ ЛБЛ ЪОБЮЕОЙЕ. йУРПМШЪХС ЛПДЩ ПЫЙВПЛ ЧНЕУФП ОПНЕТПЧ ПЫЙВПЛ НПЦОП УДЕМБФШ ЮФЕОЙЕ ЙУИПДОПЗП ЛПДБ ОЕНОПЗП МЕЗЮЕ.
дМС РПМХЮЕОЙС ДПРПМОЙФЕМШОПК ЙОЖПТНБГЙЙ ПВ ПЫЙВЛБИ MySQL РПУНПФТЙФЕ Errors, Error Codes, and Common Problems.
10.12.2. йУЛМАЮЕОЙЕ errors.Error
ьФП ЙУЛМАЮЕОЙЕ ВБЪПЧЩК ЛМБУУ ДМС ЧУЕИ ДТХЗЙИ ЙУЛМАЮЕОЙК Ч НПДХМЕ errors . ьФП НПЦЕФ ЙУРПМШЪПЧБФШУС, ЮФПВЩ ЪБЖЙЛУЙТПЧБФШ ЧУЕ ПЫЙВЛЙ Ч ПДОПН ЪБРТПУЕ except .
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ НЩ НПЗМЙ РПКНБФШ УЙОФБЛУЙЮЕУЛЙЕ ПЫЙВЛЙ:
йОЙГЙБМЙЪБГЙС ЙУЛМАЮЕОЙС РПДДЕТЦЙЧБЕФ ОЕУЛПМШЛП ДПРПМОЙФЕМШОЩИ БТЗХНЕОФПЧ, Б ЙНЕООП msg , errno , values Й sqlstate . чУЕ ПОЙ ДПРПМОЙФЕМШОЩЕ Й РП ХНПМЮБОЙА None . errors.Error ЧОХФТЕООЕ ЙУРПМШЪХЕФУС Connector/Python, ЮФПВЩ РПДОСФШ ПЫЙВЛЙ ЛМЙЕОФ-УЕТЧЕТБ MySQL Й ОЕ ДПМЦЕО ЙУРПМШЪПЧБФШУС ЧБЫЙН РТЙМПЦЕОЙЕН, ЮФПВЩ РПДОСФШ ЙУЛМАЮЕОЙС.
уМЕДХАЭЙЕ РТЙНЕТЩ РПЛБЪЩЧБАФ ТЕЪХМШФБФ, ОЕ ЙУРПМШЪХС БТЗХНЕОФПЧ ЙМЙ ЛПНВЙОБГЙЙ БТЗХНЕОФПЧ:
рТЙНЕТ, ЛПФПТЩК ЙУРПМШЪХЕФ ЛПД ПЫЙВЛЙ 1146, ЙУРПМШЪХЕФУС, ЛПЗДБ Connector/Python РПМХЮБЕФ ПЫЙВПЮОЩК РБЛЕФ ПФ УЕТЧЕТБ MySQL. йОЖПТНБГЙС ТБЪПВТБОБ Й РЕТЕДБОБ Л ЙУЛМАЮЕОЙА Error .
лБЦДЩК РПДЛМБУУ ЙУЛМАЮЕОЙС ПФ Error НПЦЕФ ВЩФШ ЙОЙГЙБМЙЪЙТПЧБО, ЙУРПМШЪХС ТБОЕЕ ХРПНСОХФЩЕ БТЗХНЕОФЩ. лТПНЕ ФПЗП, Х ЛБЦДПЗП ЬЛЪЕНРМСТБ ЕУФШ БФТЙВХФЩ errno , msg Й sqlstate , ЛПФПТЩЕ НПЗХФ ЙУРПМШЪПЧБФШУС Ч ЧБЫЕН ЛПДЕ.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ПВТБВПФБФШ ПЫЙВЛЙ, ЛПЗДБ ХДБМСЕНБС ФБВМЙГБ ОЕ УХЭЕУФЧХЕФ (ЛПЗДБ DROP TABLE ОЕ ЧЛМАЮБЕФ IF EXISTS ):
дП Connector/Python 1.1.1 ЙУИПДОПЕ УППВЭЕОЙЕ, РЕТЕДБООПЕ errors.Error() , ОЕ УПИТБОЕОП ФБЛ, ЮФПВЩ ЬФП НПЗМП ВЩФШ РТПЮЙФБОП. чНЕУФП ЬФПЗП БФТЙВХФ Error.msg ВЩМ ПФЖПТНБФЙТПЧБО УП ЪОБЮЕОЙЕН SQLSTATE Й ЛПДПН ПЫЙВЛЙ. у 1.1.1 ФПМШЛП ЙУИПДОПЕ УППВЭЕОЙЕ УПИТБОСЕФУС Ч БФТЙВХФЕ Error.msg . пФЖПТНБФЙТПЧБООПЕ ЪОБЮЕОЙЕ ЧНЕУФЕ У ЛПДПН ПЫЙВЛЙ Й ЪОБЮЕОЙЕН SQLSTATE НПЦЕФ ВЩФШ РПМХЮЕОП, РЕЮБФБС ЙМЙ РПМХЮБС УФТПЛПЧПЕ РТЕДУФБЧМЕОЙЕ ПЫЙВПЮОПЗП ПВЯЕЛФБ. рТЙНЕТ:
errors.Error ЬФП РПДЛМБУУ Python StandardError .
10.12.3. йУЛМАЮЕОЙЕ errors.DataError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП, ЛПЗДБ ВЩМЙ РТПВМЕНЩ У ДБООЩНЙ. рТЙНЕТЩ: ХУФБОПЧЛБ УФПМВГБ Ч NULL , ЛПЗДБ ЬФП ОЕ НПЦЕФ ВЩФШ NULL , ЧЩИПД ЪОБЮЕОЙС ЙЪ ДЙБРБЪПОБ ДМС УФПМВГБ, ДЕМЕОЙЕ ОБ ОХМШ, ЛПМЙЮЕУФЧП УФПМВГПЧ ОЕ УППФЧЕФУФЧХЕФ ЛПМЙЮЕУФЧХ ЪОБЮЕОЙК Й Ф.Д.
errors.DataError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.4. йУЛМАЮЕОЙЕ errors.DatabaseError
ьФП ЙУЛМАЮЕОЙЕ СЧМСЕФУС ХНПМЮБОЙЕН ДМС МАВПК ПЫЙВЛЙ MySQL, ЛПФПТБС ОЕ УППФЧЕФУФЧХЕФ ДТХЗЙН ЙУЛМАЮЕОЙСН.
errors.DatabaseError ЬФП РПДЛМБУУ errors.Error .
10.12.5. йУЛМАЮЕОЙЕ errors.IntegrityError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП, ЛПЗДБ ПФОПУЙФЕМШОБС ГЕМПУФОПУФШ ДБООЩИ ЪБФТПОХФБ. оБРТЙНЕТ, ДЧПКОПК ЛМАЮ ВЩМ ЧУФБЧМЕО ЙМЙ ПЗТБОЙЮЕОЙЕ ЧОЕЫОЕЗП ЛМАЮБ ОЕХДБЮОП.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЮФП ПЫЙВЛБ ДХВМЙТПЧБОЙС ЛМАЮБ РПДОСМБ IntegrityError:
errors.IntegrityError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.6. йУЛМАЮЕОЙЕ errors.InterfaceError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП ДМС ПЫЙВПЛ, РТПЙУИПДСЭЙИ ЙЪ УБНПЗП Connector/Python, ОЕ УЧСЪБООЩИ У УЕТЧЕТПН MySQL.
errors.InterfaceError ЬФП РПДЛМБУУ errors.Error .
10.12.7. йУЛМАЮЕОЙЕ errors.InternalError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП, ЛПЗДБ УЕТЧЕТ MySQL УФБМЛЙЧБЕФУС У ЧОХФТЕООЕК ПЫЙВЛПК, ОБРТЙНЕТ, ЛПЗДБ НЕТФЧБС ВМПЛЙТПЧЛБ РТПЙЪПЫМБ.
errors.InternalError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.8. йУЛМАЮЕОЙЕ errors.NotSupportedError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП, ЛПЗДБ ВЩМБ ЙУРПМШЪПЧБОБ ОЕЛПФПТБС ЖХОЛГЙС, ЛПФПТБС ОЕ РПДДЕТЦЙЧБЕФУС ЧЕТУЙЕК MySQL, ЛПФПТБС ЧПЪЧТБФЙМБ ПЫЙВЛХ. ьФП ФБЛЦЕ РПДОСФП, ЙУРПМШЪХС ЖХОЛГЙЙ ЙМЙ ЪБРТПУЩ, ЛПФПТЩЕ ОЕ РПДДЕТЦЙЧБАФУС УПИТБОЕООЩНЙ РПДРТПЗТБННБНЙ.
errors.NotSupportedError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.9. errors.OperationalError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП ДМС ПЫЙВПЛ, ЛПФПТЩЕ УЧСЪБОЩ У ДЕКУФЧЙСНЙ MySQL. оБРТЙНЕТ: УМЙЫЛПН НОПЗП УЧСЪЕК, ЙНС ИПУФБ ОЕ НПЗМП ВЩФШ ОБКДЕОП, РМПИПЕ ТХЛПРПЦБФЙЕ, УЕТЧЕТ ЪБЛТЩЧБЕФУС, ПЫЙВЛЙ УЧСЪЙ.
errors.OperationalError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.10. йУЛМАЮЕОЙЕ errors.PoolError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП ДМС ПЫЙВПЛ РХМБ УЧСЪЙ. errors.PoolError ЬФП РПДЛМБУУ errors.Error .
10.12.11. йУЛМАЮЕОЙЕ errors.ProgrammingError
ьФП ЙУЛМАЮЕОЙЕ РПДОСФП ОБ РТПЗТБННОЩИ ПЫЙВЛБИ, ОБРТЙНЕТ ЛПЗДБ Х ЧБУ ЕУФШ УЙОФБЛУЙЮЕУЛБС ПЫЙВЛБ Ч SQL ЙМЙ ФБВМЙГБ ОЕ ВЩМБ ОБКДЕОБ.
уМЕДХАЭЙК РТЙНЕТ РПЛБЪЩЧБЕФ, ЛБЛ ПВТБЭБФШУС У УЙОФБЛУЙЮЕУЛЙНЙ ПЫЙВЛБНЙ:
errors.ProgrammingError ЬФП РПДЛМБУУ errors.DatabaseError .
10.12.12. йУЛМАЮЕОЙЕ errors.Warning
ьФП ЙУЛМАЮЕОЙЕ ЙУРПМШЪХЕФУС ДМС УППВЭЕОЙС П ЧБЦОЩИ РТЕДХРТЕЦДЕОЙСИ, ПДОБЛП, Connector/Python ОЕ ЙУРПМШЪХЕФ ЕЗП. ьФП ЧЛМАЮЕОП, ЮФПВЩ ВЩФШ УПЧНЕУФЙНЩН У Python Database Specification v2.0 (PEP-249).
тБУУНПФТЙФЕ ЙУРПМШЪПЧБОЙЕ ВПМЕЕ УФТПЗПЗП ТЕЦЙНБ SQL ЙМЙ РБТБНЕФТБ УПЕДЙОЕОЙС raise_on_warnings, ЮФПВЩ ЪБУФБЧЙФШ Connector/Python РПДОСФШ ПЫЙВЛЙ, ЛПЗДБ ЧБЫЙ ЪБРТПУЩ РТПЙЪЧЕДХФ РТЕДХРТЕЦДЕОЙС.
errors.Warning ЬФП РПДЛМБУУ Python StandardError .
10.12.13. жХОЛГЙС errors.custom_error_exception()
ьФПФ НЕФПД ПРТЕДЕМСЕФ ЙУЛМАЮЕОЙС ДМС ПЫЙВПЛ УЕТЧЕТБ MySQL Й ЧПЪЧТБЭБЕФ ФЕЛХЭЙЕ ОБУФТПКЛЙ.
еУМЙ error ЬФП ОПНЕТ ПЫЙВЛЙ MySQL Server, ОЕПВИПДЙНП ФБЛЦЕ РЕТЕДБФШ ЛМБУУ exception . бТЗХНЕОФ error НПЦЕФ ВЩФШ УМПЧБТЕН, Ч ЬФПН УМХЮБЕ ЛМАЮ ЬФП ЛПД ПЫЙВЛЙ УЕТЧЕТБ, Б ЪОБЮЕОЙЕ ЬФП ЛМБУУ ЙУЛМАЮЕОЙС, ЛПФПТПЕ ВХДЕФ РПДОСФП.
юФПВЩ РЕТЕЪБЗТХЪЙФШ ОБУФТПКЛЙ, ЪБДБКФЕ РХУФПК УМПЧБТШ.
чЩ НПЦЕФЕ ОБРТБЧЙФШ РЙУШНП БДНЙОЙУФТБФПТХ ЬФПК УФТБОЙЮЛЙ, бМЕЛУЕА рБХФПЧХ.
Источник
- Начало работы с MySQL на Python
- Введение в MySQL на Python
- Скачивание коннектора MySQL Python
- Установка коннектора MySQL Python
- Проверка правильности установки MySQL Connector / Python
- Подключение Python к базе данных MySQL
- Подготовка экземпляра базы данных
- Подключение к базе данных MySQL с помощью функции connect()
- Подключение к базе данных MySQL с помощью объекта MySQLConnection
- Запросы Python MySQL
- Запрос данных с помощью fetchone
- Запрос данных с помощью fetchall
- Запрос данных с помощью fetchmany
- Вставка данных в Python MySQL
- Вставка одной строки в таблицу
- Вставка нескольких строк в таблицу
- Обновление данных в Python MySQL
- Удаление данных в MySQL на Python
- Вызов в Python хранимых процедур MySQL
- Прежде чем мы начнем
- Вызов хранимых процедур из Python
- Работа в Python MySQL с BLOB
- Обновление в Python BLOB-данных
- Чтение данных BLOB в Python
Это руководство поможет вам начать работу с MySQL на Python. Вы узнаете об особенностях MySQL на Python и как установить MySQL Connector / Python на вашей локальной системе.
Для доступа к базе данных MySQL из Python, вам нужен драйвер базы данных. MySQL Connector / Python является стандартизированным драйвером базы данных, предоставляемым MySQL.
MySQL Connector / Python поддерживает почти все функции, предоставляемые MySQL версии 5.7. Он позволяет конвертировать значения параметров между Python и MySQL, например, Python DateTime и MySQL DATETIME.
MySQL Connector / Python разработан специально для MySQL. Он поддерживает все расширения MySQL для стандартного SQL, такие как условие LIMIT.
MySQL Connector / Python позволяет сжимать поток данных между Python и сервером базы данных MySQL с использованием сжатия протоколов. Он поддерживает соединения с использованием сокета TCP / IP и безопасные TCP / IP соединения, использующие SSL.
MySQL Connector / Python представляет собой API, реализованнный с помощью чистого Python. Это означает, что вам не нужно устанавливать какую-либо клиентскую библиотеку MySQL или модули Python, кроме стандартной библиотеки.
В этом пособии мы будем рассматривать MySQL / Python 2.0, который поддерживает Python версий 2.6, 2.7 и 3.3.
Для работы с коннектором MySQL Python вам необходимо скачать и установить его в вашей локальной системе. Доступны версии для различных платформ: Mac OS X, Microsoft Windows, Ubuntu Linux и т.д. Вам просто нужно выбрать нужную платформу и запустить скачивание.
Процесс установки коннектора MySQL Python довольно прост. Например, чтобы установить его в среде Windows, нужно выполнить следующие действия:
- Распаковать загруженный файл во временный каталог, например, C: Temp;
- Открыть окно консоли и переключиться на папку, в которую вы распаковали коннектор:
- В папке C: Temp использовать следующую команду:
c:temp > python setup.py install
После установки коннектора MySQL Python вы должны проверить его, чтобы убедиться, что он работает правильно, и вы можете подключаться к серверу базы данных MySQL без каких-либо проблем. Для проверки правильности установки выполните следующие действия:
- Откройте командную строку Python;
- Введите следующий код:
>>> import mysql.connector >>> mysql.connector.connect(host='localhost',database='mysql',user='root',password='')
Если на экране появится приведенный ниже текст, значит, вы успешно установили коннектор MySQL Python на вашей системе:
<mysql.connector.connection.MySQLConnection object at 0x0187AE50>
Давайте перейдем к следующему разделу, чтобы узнать, как подключаться к базе данных MySQL из Python.
В этом разделе вы узнаете о различных способах подключения к базам данных MySQL из Python с использованием MySQL Connector / Python API.
Во-первых, для этого пособия мы создаем новую базу данных с именем python_mysql. Чтобы создать новую базу данных, вы можете запустить MySQL Workbench или клиентский инструмент MySQL и использовать оператор CREATE DATABASE следующим образом:
1 CREATE DATABASE python_mysql;
Во-вторых, вам нужно загрузить данные в базу данных python_mysql.sql из файла python_mysql.sql.
Пример базы данных Python MySQL
Давайте рассмотрим следующий модуль Python (python_mysql_connect1.py):
import mysql.connector from mysql.connector import Error def connect(): """ Connect to MySQL database """ try: conn = mysql.connector.connect(host='localhost', database='python_mysql', user='root', password='secret') if conn.is_connected(): print('Connected to MySQL database') except Error as e: print(e) finally: conn.close() if __name__ == '__main__': connect()
Давайте рассмотрим этот модуль в деталях:
- Во-первых, мы импортируем объекты mysql.connector и Error из пакета MySQL Connector / Python;
- Во-вторых, для подключения к базе данных MySQL мы используем функцию connect(), которая принимает следующие параметры: хост, база данных, пользователь и пароль. Функция connect() устанавливает соединение с базой данных python_mysql и возвращает объект MySQLConnection;
- В-третьих, мы проверяем, было ли успешно установлено соединение с базой данных MySQL с помощью метода is_connected(). В случае возникновения исключений, например, если сервер базы данных не доступен, база данных не существует, имя пользователя или пароль неверны и т.д., Python вызовет исключение Error. Мы обрабатываем это исключение, используя блок try except;
- В-четвертых, если не произошло исключение, мы закрываем соединение с базой данных, вызвав метод Close() объекта MySQLConnection.
Для тестирования модуля python_mysql_connect1.py, используется следующая команда:
>python python_mysql_connect1.py Connected to MySQL database
В этом примере, мы жестко задали настройки базы данных, такие как localhost, python_mysql,root, что нельзя назвать хорошей практикой. Поэтому давайте исправим это.
В этом примере мы создадим конфигурационный файл базы данных с именем config.ini и определим раздел с четырьмя параметрами следующим образом:
[mysql] host = localhost database = python_mysql user = root password =
Мы можем создать новый модуль с именем python_mysql_dbconfig.py, который считывает конфигурацию базы данных из файла config.ini и возвращает словарь следующим образом:
from configparser import ConfigParser def read_db_config(filename='config.ini', section='mysql'): """ Read database configuration file and return a dictionary object :param filename: name of the configuration file :param section: section of database configuration :return: a dictionary of database parameters """ # create parser and read ini configuration file parser = ConfigParser() parser.read(filename) # get section, default to mysql db = {} if parser.has_section(section): items = parser.items(section) for item in items: db[item[0]] = item[1] else: raise Exception('{0} not found in the {1} file'.format(section, filename)) return db
Обратите внимание, что мы использовали пакет ConfigureParser, чтобы считать файл конфигурации.
Давайте проверим этот модуль в REPL:
>>> from python_mysql_dbconfig import read_db_config >>> read_db_config() {'password': '', 'host': 'localhost', 'user': 'root', 'database': 'python_mysql'}
Он работает, как ожидалось.
Теперь мы можем создать новый модуль python_mysql_connect2.py, который использует объект MySQLConnection для подключения к базе данных python_mysql:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def connect(): """ Connect to MySQL database """ db_config = read_db_config() try: print('Connecting to MySQL database...') conn = MySQLConnection(**db_config) if conn.is_connected(): print('connection established.') else: print('connection failed.') except Error as error: print(error) finally: conn.close() print('Connection closed.') if __name__ == '__main__': connect()
Давайте рассмотрим приведенный выше код более подробно:
- Во-первых, мы импортировали необходимые объекты, в том числе MySQLConnection, Error из пакета MySQL Connector / Python и read_db_config из модуля python_mysql_dbconfig, который мы разработали;
- Во-вторых, внутри функции Connect(), мы считали конфигурацию базы данных и использовали ее для создания нового экземпляра объекта MySQLConnection. Остальная часть кода работает аналогично первому примеру.
Когда мы запускаем python_mysql_connect2 в окне консоли, мы получаем следующий результат:
>python python_mysql_connect2.py Connecting to MySQL database... connection established. Connection closed.
В этом разделе мы рассмотрели, как подключаться к базам данных MySQL с помощью функцию connect() и объекта MySQLConnection. Оба способа дают тот же результат — устанавливают соединение с базой данных MySQL и возвращают объект MySQLConnection.
В этом разделе мы покажем, как запрашивать данные из базы данных MySQL в Python с использованием MySQL Connector / Python API, таких как fetchone(), fetchmany() и fetchall().
Для запроса данных из базы данных MySQL из Python вам нужно сделать следующее:
- Подключиться к базе данных MySQL, вы получаете объект MySQLConnection;
- Установить экземпляр объекта MySQLCursor из объекта MySQLConnection;
- Использовать курсора для выполнения запроса путем вызова метода execute();
- Использовать методы fetchone(), fetchmany() и fetchall() для выборки данных из результативного набора;
- Закрыть курсор, а также подключение к базе данных, вызвав метод close() соответствующего объекта.
Мы расскажем, как использовать методы fetchone(), fetchmany() и fetchall() более подробно в следующих разделах.
Метод fetchone() возвращает следующую строку набора результатов запроса или None в случае, если строк не осталось. Давайте посмотрим на следующий код:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def query_with_fetchone(): try: dbconfig = read_db_config() conn = MySQLConnection(**dbconfig) cursor = conn.cursor() cursor.execute("SELECT * FROM books") row = cursor.fetchone() while row is not None: print(row) row = cursor.fetchone() except Error as e: print(e) finally: cursor.close() conn.close() if __name__ == '__main__': query_with_fetchone()
Давайте рассмотрим его более подробно:
- Во-первых, мы подключаемся к базе данных, создав новый объект MySQLConnection;
- Во-вторых, из объекта MySQLConnection мы устанавливаем новый объект MySQLCursor;
- В-третьих, мы выполняем запрос, который выбирает все строки из таблицы books;
- В-четвертых, мы вызываем метод fetchone(), чтобы выбрать следующую строку из набора результатов. В блоке while loop мы выводим содержимое строки и переходим к следующей строке, пока все строки не будут выбраны;
- В-пятых, мы закрываем курсор и объект подключения через вызов метода close() соответствующего объекта.
В том случае, если число строк в таблице мало, вы можете использовать для извлечения всех строк из таблицы базы данных метод fetchall(). Рассмотрим следующий код:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def query_with_fetchall(): try: dbconfig = read_db_config() conn = MySQLConnection(**dbconfig) cursor = conn.cursor() cursor.execute("SELECT * FROM books") rows = cursor.fetchall() print('Total Row(s):', cursor.rowcount) for row in rows: print(row) except Error as e: print(e) finally: cursor.close() conn.close() if __name__ == '__main__': query_with_fetchall()
Логика тут почти та же, что и в примере с использованием метода fetchone(), за исключением вызова метода fetchall(). Так как мы выбрали в память все строки из таблицы books, мы можем получить общее количество возвращаемых строк с помощью свойства rowcount объекта курсора.
Для сравнительно больших таблиц извлечение всех строк и возвращение набора результатов может занять значительное время. Кроме того, для fetchall() необходимо выделение достаточного объема памяти для хранения всего набора результатов. Это не слишком эффективно.
MySQL Connector / Python предоставляет нам метод fetchmany(), который возвращает следующее количество строк (n) набора результатов, что позволяет нам эффективно использовать объем памяти за оптимальное время. Давайте рассмотрим, как используется метод fetchmany().
Во-первых, мы разрабатываем генератор, который разбивает вызовы базы данных на серию вызовов fetchmany() следующим образом:
def iter_row(cursor, size=10): while True: rows = cursor.fetchmany(size) if not rows: break for row in rows: yield row
Во-вторых, мы можем использовать генератор iter_row() для извлечения 10 строк за раз, как это показано ниже:
def query_with_fetchmany(): try: dbconfig = read_db_config() conn = MySQLConnection(**dbconfig) cursor = conn.cursor() cursor.execute("SELECT * FROM books") for row in iter_row(cursor, 10): print(row) except Error as e: print(e) finally: cursor.close() conn.close()
В этом разделе мы рассмотрели различные методы запроса данных из базы данных MySQL на Python. Важно понимать каждую технику, чтобы для каждого конкретного случая использовать соответствующий вариант, что позволит увеличить производительность и оптимизировать потребление памяти.
В этом разделе мы расскажем, как вставлять данные в таблицы MySQL с использованием MySQL Connector / Python API.
Чтобы вставить новые строки в таблицу MySQL необходимо выполнить следующие действия:
- Подключиться к серверу базы данных MySQL, создав новый объект MySQLConnection;
- Инициировать объект MySQLCursor из объекта MySQLConnection;
- Выполнить оператор INSERT для вставки данных в соответствующую таблицу;
- Закрыть соединение с базой данных.
MySQL Connector / Python предоставляет API, который позволяет вставить за один раз одну или несколько строк в таблицу. Давайте рассмотрим каждый метод более подробно.
Следующий код вставляет новую книгу в таблицу books:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def insert_book(title, isbn): query = "INSERT INTO books(title,isbn) " "VALUES(%s,%s)" args = (title, isbn) try: db_config = read_db_config() conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.execute(query, args) if cursor.lastrowid: print('last insert id', cursor.lastrowid) else: print('last insert id not found') conn.commit() except Error as error: print(error) finally: cursor.close() conn.close() def main(): insert_book('A Sudden Light','9781439187036') if __name__ == '__main__': main()
В приведенном выше коде мы:
- Во-первых, импортируем объекты MySQLConnection и Error из пакета MySQL Connector / Python и функцию read_db_config() из модуля python_mysql_dbconfig;
- Во-вторых, определяем новую функцию под названием insert_book(), которая принимает два аргумента: название и ISBN. Внутри функции insert_book(), мы готовим оператор INSERT (запрос) и данные (аргументы), которые мы будем вставлять в таблицу books. Обратите внимание, что данные, которые мы передаем в функцию, это кортеж;
- В-третьих, внутри блока try except мы создаем новое подключение, выполняем оператор и утверждаем изменения. Обратите внимание, что вы должны вызвать метод commit() явно для того, чтобы изменения в базу данных были внесены. В случае, если новая строка была вставлена успешно, мы можем получить последний вставленный id столбца АUTO INCREMENT с помощью свойство lastrowid объекта MySQLCursor;
- В-четвертых, в конце функции insert_book() мы закрываем курсор и соединение с базой данных;
- В-пятых, в функции main()мы вызываем функцию insert_book() и передаем title и isbn, чтобы вставить новую строку в таблицу books.
Оператор MySQL INSERT позволяет вставить сразу несколько строк с помощью синтаксиса VALUES. Вам просто нужно включить несколько списков значений столбцов. Каждый список заключен в скобки и разделен запятыми. Например, чтобы вставить несколько книг в таблицу books используется следующий оператор:
INSERT INTO books(title,isbn) VALUES('Harry Potter And The Order Of The Phoenix', '9780439358071'), ('Gone with the Wind', '9780446675536'), ('Pride and Prejudice (Modern Library Classics)', '9780679783268'); Чтобы вставить несколько строк в таблицу в Python используется метод executemany() объекта MySQLCursor. Смотрите следующий код: from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def insert_books(books): query = "INSERT INTO books(title,isbn) " "VALUES(%s,%s)" try: conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.executemany(query, books) conn.commit() except Error as e: print('Error:', e) finally: cursor.close() conn.close() def main(): books = [('Harry Potter And The Order Of The Phoenix', '9780439358071'), ('Gone with the Wind', '9780446675536'), ('Pride and Prejudice (Modern Library Classics)', '9780679783268')] insert_books(books) if __name__ == '__main__': main()
Логика в этом примере аналогична логике первого примера. Только вместо вызова метода execute() мы используем метод executemany().
В функции main() мы передаем список кортежей, каждый из которых содержит название и ISBN книги.
Вызвав метод executemany() объекта MySQLCursor, MySQL Connector / Python переводит оператор INSERT в оператор, который содержит несколько списков значений.
В этом разделе мы рассмотрели, как вставить одну или несколько строк в таблицу MySQL в Python.
В этом разделе мы рассмотрим действия, необходимые для обновления данных в таблице MySQL с помощью MySQL Connector / Python API.
Для обновления данных в таблице MySQL в Python, вам нужно выполнить следующие действия:
- Подключиться к серверу базы данных MySQL, создав новый объект MySQLConnection;
- Создать новый объект MySQLCursor из объекта MySQLConnection и вызвать метод execute() объекта MySQLCursor. Чтобы утвердить изменения, нужно вызвать метод commit() объекта MySQLConnection после вызова метода execute(). В противном случае никакие изменения в базу данных внесены не будут;
- Закрыть курсор и соединение с базой данных.
В следующем примере, мы будем обновлять название книги, указанной через ID книги:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def update_book(book_id, title): # read database configuration db_config = read_db_config() # prepare query and data query = """ UPDATE books SET title = %s WHERE id = %s """ data = (title, book_id) try: conn = MySQLConnection(**db_config) # update book title cursor = conn.cursor() cursor.execute(query, data) # accept the changes conn.commit() except Error as error: print(error) finally: cursor.close() conn.close() if __name__ == '__main__': update_book(37, 'The Giant on the Hill *** TEST ***')
В этом модуле мы использовали функцию read_db_config() из модуля python_mysql_dbconfig, который мы создали в разделе Подключение к базе данных через Python.
Внутри оператора UPDATE мы размещаем два заполнителя (%), один для названия книги, второй — для ID книги. Мы передали оба кортежа оператора UPDATE (query) и (title,id) в метод execute(). Коннектор интерпретирует запрос следующим образом:
UPDATE books SET title = 'The Giant on the Hill *** TEST ***' WHERE id = 37
Важно помнить, что мы всегда должны использовать заполнители (%) внутри любых операторов SQL, которые содержат информацию пользователей. Это помогает нам предотвратить потенциально вредоносные действия.
Давайте проверим наш новый модуль, чтобы убедиться, если он работает.
Во-первых, мы выбираем книгу с ID 37:
SELECT * FROM books WHERE id = 37;
Во-вторых, мы запускаем модуль.
В-третьих, мы выбираем запись книги, снова выполнив оператор SELECT, чтобы увидеть, действительно ли запись изменилась.
Все работает, как ожидалось.
В этом разделе вы рассказали, как обновлять данные с помощью MySQL Connector / Python API.
В этом разделе мы рассмотрим этапы удаления данных из базы данных MySQL с помощью MySQL Python.
Для удаления строк в таблице MySQL через Python вам нужно совершить следующие действия:
- Подключиться к серверу базы данных MySQL, создав новый объект MySQLConnection;
- Создать новый объект MySQLCursor из объекта MySQLConnection и вызвать метод execute() объекта MySQLCursor. Чтобы утвердить изменения, нужно вызвать метод commit() объекта MySQLConnection после вызова метода execute();
- Закрыть курсора и соединение с базой данных, вызвав метод close() соответствующего объекта.
В следующем примере показано, как удалить книгу с указанным ID:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def delete_book(book_id): db_config = read_db_config() query = "DELETE FROM books WHERE id = %s" try: # connect to the database server conn = MySQLConnection(**db_config) # execute the query cursor = conn.cursor() cursor.execute(query, (book_id,)) # accept the change conn.commit() except Error as error: print(error) finally: cursor.close() conn.close() if __name__ == '__main__': delete_book(102)
Обратите внимание, что мы используем функцию read_db_config() из модуля python_mysql_dbconfig, который мы разработали в предыдущих разделах.
Так как нам нужно удалить из таблицы books конкретную строку, мы должны разместить заполнитель (%) на стороне оператора DELETE.
Когда мы вызываем метод execute(), мы передаем ему и оператор DELETE и кортеж (book_id,). Коннектор интерпретирует оператор DELETE в следующую форму:
DELETE FROM books WHERE id = 102
Вы должны всегда использовать заполнители внутри любого запроса, который вы передаете в метод execute().
Это помогает нам предотвратить потенциально вредоносные действия.
Перед запуском кода, давайте проверим таблицу books, чтобы просмотреть данные, прежде чем мы удалим запись:
SELECT * FROM books WHERE id = 102;
После запуска приведенного выше модуля, мы снова выполняем оператор SELECT. Строка не возвращается. Это означает, что модуль успешно удалил запись.
В этом разделе мы рассмотрели, как удалить данные из таблицы MySQL с использованием MySQL Connector / Python API.
В этом разделе мы покажем, как вызывать в Python хранимые процедуры MySQL с использованием MySQL Connector / Python API.
В этом разделе в качестве демонстрации мы создадим две хранимые процедуры. Первая — для получения всех книг с информацией об авторе из таблиц books и authors:
DELIMITER $$ USE python_mysql$$ CREATE PROCEDURE find_all() BEGIN SELECT title, isbn, CONCAT(first_name,' ',last_name) AS author FROM books INNER JOIN book_author ON book_author.book_id = books.id INNER JOIN AUTHORS ON book_author.author_id = authors.id; END$$ DELIMITER ;
Хранимая процедура find_all() содержит оператор SELECT с условием JOIN, который извлекает название, ISBN и полное имя автора из таблиц books и authors. Когда мы выполняем хранимую процедуру find_all(), она возвращает следующий результат:
CALL find_all(); [IMG=http://www.mysqltutorial.org/wp-content/uploads/2014/10/python_mysql_stored_procedure_example.png?cf1f9d] Вторая хранимая процедура с именем find_by_isbn() используется, чтобы найти книгу по ISBN следующим образом: DELIMITER $$ CREATE PROCEDURE find_by_isbn(IN p_isbn VARCHAR(13),OUT p_title VARCHAR(255)) BEGIN SELECT title INTO p_title FROM books WHERE isbn = p_isbn; END$$ DELIMITER ;
find_by_isbn() принимает два параметра: первый параметр ISBN (параметр IN), второй — заголовок (OUT параметр). Когда вы передаете в хранимую процедуру ISBN, вы получаете название книги, например:
CALL find_by_isbn('1235927658929',@title); SELECT @title;
Для вызова хранимой процедуры в Python, вам нужно выполнить следующие действия:
- Подключиться к серверу базы данных MySQL, создав новый объект MySQLConnection;
- Создать новый объект MySQLCursor из объекта MySQLConnection, вызвав метод cursor();
- Вызвать метод callproc() объекта MySQLCursor. Вы передаете имя хранимой процедуры в качестве первого аргумента метода callproc(). Если для хранимой процедуры требуются параметры, вы должны передать их список в качестве второго аргумента метода callproc(). В случае, если хранимая процедура возвращает набор результатов, вы можете ссылаться на метод stored_results() объекта MySQLCursor, чтобы получить итератор списка и перебрать этот набор результатов с помощью метода fetchall();
- Закрыть курсора и подключение к базе данных, как всегда.
Следующий пример демонстрирует, как вызывать хранимую процедуру find_all()в Python и выводить набор результатов:
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def call_find_all_sp(): try: db_config = read_db_config() conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.callproc('find_all') # print out the result for result in cursor.stored_results(): print(result.fetchall()) except Error as e: print(e) finally: cursor.close() conn.close() if __name__ == '__main__': call_find_all_sp()
В следующем примере показано, как вызвать хранимую процедуру find_by_isbn():
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def call_find_by_isbn(): try: db_config = read_db_config() conn = MySQLConnection(**db_config) cursor = conn.cursor() args = ['1236400967773', 0] result_args = cursor.callproc('find_by_isbn', args) print(result_args[1]) except Error as e: print(e) finally: cursor.close() conn.close() if __name__ == '__main__': call_find_by_isbn()
Для хранимой процедуры find_by_isbn() требуются два параметра, следовательно, мы должны передать список (args), который содержит два элемента: первый из них ISBN (1236400967773), а второй 0. Второй элемент списке аргументов (0) — это просто заполнитель содержащий параметр p_title.
Метод callproc() возвращает список (result_args), который содержит два элемента, где второй элемент (result_args[1]) содержит значение параметра p_title.
В этом разделе мы рассмотрели, как вызываются хранимые процедуры через Python с использованием метода callproc() объекта MySQLCursor.
В этом разделе мы рассмотрим, как работать в Python с данными MySQL BLOB, а именно примеры обновления и чтения данных BLOB.
В таблице authors содержится столбец с именем photo, в котором хранятся данные типа BLOB. Мы считаем данные из файла изображения и обновим ими столбец photo.
Во-первых, мы разрабатываем функцию с именем read_file(), которая считывает файл и возвращает содержимое файла:
def read_file(filename): with open(filename, 'rb') as f: photo = f.read() return photo
Во-вторых, мы создаем новую функцию под названием update_blob(), которая обновляет фото автора, указанного с помощью author_id.
from mysql.connector import MySQLConnection, Error from python_mysql_dbconfig import read_db_config def update_blob(author_id, filename): # read file data = read_file(filename) # prepare update query and data query = "UPDATE authors " "SET photo = %s " "WHERE id = %s" args = (data, author_id) db_config = read_db_config() try: conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.execute(query, args) conn.commit() except Error as e: print(e) finally: cursor.close() conn.close()
Давайте подробно рассмотрим этот код:
- Во-первых, мы вызываем функцию read_file(), которая считывает данные из файла и возвращает их;
- Во-вторых, мы составляем оператор UPDATE, который обновляет столбец фото автора, указанного с помощью author_id. Переменная args — это кортеж, который содержит данные файла и author_id. Мы передаем эту переменную в метод execute() вместе с query;
- В-третьих, внутри блока try except мы подключаемся к базе данных, устанавливаем курсор и выполняем запрос с args. Для того чтобы изменения вступили в силу, мы вызываем метод commit() объекта MySQLConnection;
- В-четвертых, мы закрываем курсора и соединение с базой данных в блоке finally.
Обратите внимание, что мы импортировали объекты MySQLConnection и Error из пакета MySQL Connector / Python и функцию read_db_config() из модуля python_mysql_dbconfig, который мы разработали в предыдущих разделах.
Давайте протестируем функцию update_blob():
def main(): update_blob(144, "picturesgarth_stein.jpg") if __name__ == '__main__': main()
Обратите внимание, что для тестирования вы можете использовать следующую фотографию и поместить ее в папку изображений:
Внутри основной функции, мы вызываем функцию update_blob() для обновления столбца фото для автора с идентификатором 144. Чтобы проверить результат, мы выбираем данные из таблицы authors:
SELECT * FROM authors WHERE id = 144;
Все работает, как ожидалось.
В этом примере мы выбираем BLOB-данные из таблицы авторов и записываем их в файл.
Во-первых, мы разрабатываем функцию write_file(), которая записывает двоичные данные в файл следующим образом:
def write_file(data, filename): with open(filename, 'wb') as f: f.write(data)
Во-вторых, мы создаем новую функцию под названием read_blob():
def read_blob(author_id, filename): # select photo column of a specific author query = "SELECT photo FROM authors WHERE id = %s" # read database configuration db_config = read_db_config() try: # query blob data form the authors table conn = MySQLConnection(**db_config) cursor = conn.cursor() cursor.execute(query, (author_id,)) photo = cursor.fetchone()[0] # write blob data into a file write_file(photo, filename) except Error as e: print(e) finally: cursor.close() conn.close()
Функция read_blob() считывает BLOB-данные из таблицы authors и записывает их в файл, указанный в параметре имени файла.
Этот код действует очень просто:
- Во-первых, мы составляем оператор SELECT, который извлекает фотографию конкретного автора;
- Во-вторых, мы получаем конфигурацию базы данных, вызвав функцию read_db_config();
- В-третьих, внутри блока try except мы подключаемся к базе данных, устанавливаем курсор и выполняем запрос. После того, как мы получили BLOB-данные, мы используем функцию write_file(), чтобы записать их в файл, указанный в имени файла;
- В-четвертых, в конечном блоке мы закрываем курсор и соединение с базой данных.
Теперь, давайте проверим функцию read_blob():
def main(): read_blob(144,"outputgarth_stein.jpg") if __name__ == '__main__': main()
Если вы откроете папку вывода в проекте и увидите там картинку, это означает, что вы успешно считали BLOB-данные.
В этом разделе, мы рассказали, как обновлять и считывать BLOB-данные в MySQL из Python с использованием MySQL Connector / API.