Mysql connector python error

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 er…
  1. Home
  2. MySQL Connector/Python Tutorial
  3. 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.

  1. Error
  2. 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
  1. A unique MySQL specific error code (1146) that is not portable to other databases.

  2. 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.

    1. Success (class 00)
    2. Warning (class 01)
    3. No Data (class 02)
    4. Exception (all the others 07-HZ)
  3. 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:

  1. DatabaseError
  2. InterfaceError
  3. PoolError

Let’s discuss them one by one.

  1. 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:

    1. DataError
    2. InternalError
    3. IntegrityError
    4. OperationalError
    5. NotSupportedError
    6. ProgrammingError

    1. DataError: This error indicates a problem with the data processing, like division by zero, numeric value out of range, invalid type etc.
    2. InternalError: This exception is raised when the database encounters an internal error. For e.g invalid cursor, transaction out of sync etc.
    3. IntegrityError: This exception is raised when the foreign key constraint fails.
    4. 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.
    5. 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.
    6. 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.
  2. InterfaceError: This exception is raised for errors related to the interface (in our case interface is MySQL Connector/Python) rather than the database itself.

  3. 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:



Ezoic

Содержание

  1. 21.6.7.1. Ошибки и Исключения
  2. 21.6.7.1.1. Модуль errorcode
  3. 21.6.7.1.2. Исключение errors.Error
  4. 21.6.7.1.3. Исключение errors.Warning
  5. 21.6.7.1.4. Исключение errors.InterfaceError
  6. 21.6.7.1.5. Исключение errors.DatabaseError
  7. 21.6.7.1.6. Исключение errors.InternalError
  8. 21.6.7.1.7. Исключение errors.OperationalError
  9. 21.6.7.1.8. Исключение errors.ProgrammingError
  10. 21.6.7.1.9. Исключение errors.IntegrityError
  11. 21.6.7.1.10. Исключение errors.DataError
  12. 21.6.7.1.11. Исключение errors.NotSupportedError
  13. 21.6.7.1.12. Функция errors.custom_error_exception(error=None,exception=None)
  14. Exception Handling in Connector/Python
  15. Errors and Warnings #
  16. Error #
  17. Warning #
  18. Error Codes #
  19. Exceptions Classes #
  20. Handling Warnings #
  21. зМБЧБ 10. Connector/Python API
  22. 10.1. нПДХМШ mysql.connector
  23. 10.1.1. нЕФПД mysql.connector.connect()
  24. 10.1.2. уЧПКУФЧП mysql.connector.apilevel
  25. 10.1.3. уЧПКУФЧП mysql.connector.paramstyle
  26. 10.1.4. уЧПКУФЧП mysql.connector.threadsafety
  27. 10.1.5. уЧПКУФЧП mysql.connector.__version__
  28. 10.1.6. уЧПКУФЧП mysql.connector.__version_info__
  29. 10.2. лМБУУ connection.MySQLConnection
  30. 10.2.1. лПОУФТХЛФПТ connection.MySQLConnection()
  31. 10.2.2. нЕФПД MySQLConnection.close()
  32. 10.2.3. нЕФПД MySQLConnection.commit()
  33. 10.2.4. нЕФПД MySQLConnection.config()
  34. 10.2.5. нЕФПД MySQLConnection.connect()
  35. 10.2.6. нЕФПД MySQLConnection.cursor()
  36. 10.2.7. нЕФПД MySQLConnection.cmd_change_user()
  37. 10.2.8. нЕФПД MySQLConnection.cmd_debug()
  38. 10.2.9. нЕФПД MySQLConnection.cmd_init_db()
  39. 10.2.10. нЕФПД MySQLConnection.cmd_ping()
  40. 10.2.11. нЕФПД MySQLConnection.cmd_process_info()
  41. 10.2.12. нЕФПД MySQLConnection.cmd_process_kill()
  42. 10.2.13. нЕФПД MySQLConnection.cmd_query()
  43. 10.2.14. нЕФПД MySQLConnection.cmd_query_iter()
  44. 10.2.15. нЕФПД MySQLConnection.cmd_quit()
  45. 10.2.16. нЕФПД MySQLConnection.cmd_refresh()
  46. 10.2.17. нЕФПД MySQLConnection.cmd_reset_connection()
  47. 10.2.18. нЕФПД MySQLConnection.cmd_shutdown()
  48. 10.2.19. нЕФПД MySQLConnection.cmd_statistics()
  49. 10.2.20. нЕФПД MySQLConnection.disconnect()
  50. 10.2.21. нЕФПД MySQLConnection.get_row()
  51. 10.2.22. нЕФПД MySQLConnection.get_rows()
  52. 10.2.23. нЕФПД MySQLConnection.get_server_info()
  53. 10.2.24. нЕФПД MySQLConnection.get_server_version()
  54. 10.2.25. нЕФПД MySQLConnection.is_connected()
  55. 10.2.26. нЕФПД MySQLConnection.isset_client_flag()
  56. 10.2.27. нЕФПД MySQLConnection.ping()
  57. 10.2.28. нЕФПД MySQLConnection.reconnect()
  58. 10.2.29. нЕФПД MySQLConnection.reset_session()
  59. 10.2.30. нЕФПД MySQLConnection.rollback()
  60. 10.2.31. нЕФПД MySQLConnection.set_charset_collation()
  61. 10.2.32. нЕФПД MySQLConnection.set_client_flags()
  62. 10.2.33. нЕФПД MySQLConnection.shutdown()
  63. 10.2.34. нЕФПД MySQLConnection.start_transaction()
  64. 10.2.35. уЧПКУФЧП MySQLConnection.autocommit
  65. 10.2.36. уЧПКУФЧП MySQLConnection.unread_results
  66. 10.2.37. уЧПКУФЧП MySQLConnection.can_consume_results
  67. 10.2.38. уЧПКУФЧП MySQLConnection.charset
  68. 10.2.39. уЧПКУФЧП MySQLConnection.collation
  69. 10.2.40. уЧПКУФЧП MySQLConnection.connection_id
  70. 10.2.41. уЧПКУФЧП MySQLConnection.database
  71. 10.2.42. уЧПКУФЧП MySQLConnection.get_warnings
  72. 10.2.43. уЧПКУФЧП MySQLConnection.in_transaction
  73. 10.2.44. уЧПКУФЧП MySQLConnection.raise_on_warnings
  74. 10.2.45. уЧПКУФЧП MySQLConnection.server_host
  75. 10.2.46. уЧПКУФЧП MySQLConnection.server_port
  76. 10.2.47. уЧПКУФЧП MySQLConnection.sql_mode
  77. 10.2.48. уЧПКУФЧП MySQLConnection.time_zone
  78. 10.2.49. уЧПКУФЧП MySQLConnection.unix_socket
  79. 10.2.50. уЧПКУФЧП MySQLConnection.user
  80. 10.3 pooling.MySQLConnectionPool
  81. 10.3.1. лПОУФТХЛФПТ pooling.MySQLConnectionPool
  82. 10.3.2. нЕФПД MySQLConnectionPool.add_connection()
  83. 10.3.3. нЕФПД MySQLConnectionPool.get_connection()
  84. 10.3.4. нЕФПД MySQLConnectionPool.set_config()
  85. 10.3.5. уЧПКУФЧП MySQLConnectionPool.pool_name
  86. 10.4. pooling.PooledMySQLConnection
  87. 10.4.1. лПОУФТХЛФПТ pooling.PooledMySQLConnection
  88. 10.4.2. нЕФПД PooledMySQLConnection.close()
  89. 10.4.3. нЕФПД PooledMySQLConnection.config()
  90. 10.4.4. уЧПКУФЧП PooledMySQLConnection.pool_name
  91. 10.5. cursor.MySQLCursor
  92. 10.5.1. лПОУФТХЛФПТ cursor.MySQLCursor
  93. 10.5.2. нЕФПД MySQLCursor.callproc()
  94. 10.5.3. нЕФПД MySQLCursor.close()
  95. 10.5.4. нЕФПД MySQLCursor.execute()
  96. 10.5.5. нЕФПД MySQLCursor.executemany()
  97. 10.5.6. нЕФПД MySQLCursor.fetchall()
  98. 10.5.7. нЕФПД MySQLCursor.fetchmany()
  99. 10.5.8. нЕФПД MySQLCursor.fetchone()
  100. 10.5.9. нЕФПД MySQLCursor.fetchwarnings()
  101. 10.5.10. нЕФПД MySQLCursor.stored_results()
  102. 10.5.11. уЧПКУФЧП MySQLCursor.column_names
  103. 10.5.12. уЧПКУФЧП MySQLCursor.description
  104. 10.5.13. уЧПКУФЧП MySQLCursor.lastrowid
  105. 10.5.14. уЧПКУФЧП MySQLCursor.rowcount
  106. 10.5.15. уЧПКУФЧП MySQLCursor.statement
  107. 10.5.16. уЧПКУФЧП MySQLCursor.with_rows
  108. 10.6. уХВЛМБУУЩ cursor.MySQLCursor
  109. 10.6.1. лМБУУ cursor.MySQLCursorBuffered
  110. 10.6.2. лМБУУ cursor.MySQLCursorRaw
  111. 10.6.3. лМБУУ cursor.MySQLCursorBufferedRaw
  112. 10.6.4. лМБУУ cursor.MySQLCursorDict
  113. 10.6.5. лМБУУ cursor.MySQLCursorBufferedDict
  114. 10.6.6. лМБУУ cursor.MySQLCursorNamedTuple
  115. 10.6.7. лМБУУ cursor.MySQLCursorBufferedNamedTuple
  116. 10.6.8. лМБУУ cursor.MySQLCursorPrepared
  117. 10.7. лМБУУ constants.ClientFlag
  118. 10.8. лМБУУ constants.FieldType
  119. 10.9. лМБУУ constants.SQLMode
  120. 10.10. лМБУУ constants.CharacterSet
  121. 10.11. лМБУУ constants.RefreshOption
  122. 10.12. пЫЙВЛЙ Й ЙУЛМАЮЕОЙС
  123. 10.12.1. нПДХМШ errorcode
  124. 10.12.2. йУЛМАЮЕОЙЕ errors.Error
  125. 10.12.3. йУЛМАЮЕОЙЕ errors.DataError
  126. 10.12.4. йУЛМАЮЕОЙЕ errors.DatabaseError
  127. 10.12.5. йУЛМАЮЕОЙЕ errors.IntegrityError
  128. 10.12.6. йУЛМАЮЕОЙЕ errors.InterfaceError
  129. 10.12.7. йУЛМАЮЕОЙЕ errors.InternalError
  130. 10.12.8. йУЛМАЮЕОЙЕ errors.NotSupportedError
  131. 10.12.9. errors.OperationalError
  132. 10.12.10. йУЛМАЮЕОЙЕ errors.PoolError
  133. 10.12.11. йУЛМАЮЕОЙЕ errors.ProgrammingError
  134. 10.12.12. йУЛМАЮЕОЙЕ errors.Warning
  135. 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.

  1. Success (class 00)
  2. Warning (class 01)
  3. No Data (class 02)
  4. 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:

  1. DatabaseError
  2. InterfaceError
  3. 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 :

  1. DataError
  2. InternalError
  3. IntegrityError
  4. OperationalError
  5. NotSupportedError
  6. ProgrammingError
  1. DataError : This error indicates a problem with the data processing, like division by zero, numeric value out of range, invalid type etc.
  2. InternalError : This exception is raised when the database encounters an internal error. For e.g invalid cursor, transaction out of sync etc.
  3. IntegrityError : This exception is raised when the foreign key constraint fails.
  4. 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.
  5. 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.
  6. 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 НПЦЕФ ВЩФШ УМПЧБТЕН, Ч ЬФПН УМХЮБЕ ЛМАЮ ЬФП ЛПД ПЫЙВЛЙ УЕТЧЕТБ, Б ЪОБЮЕОЙЕ ЬФП ЛМБУУ ЙУЛМАЮЕОЙС, ЛПФПТПЕ ВХДЕФ РПДОСФП.

юФПВЩ РЕТЕЪБЗТХЪЙФШ ОБУФТПКЛЙ, ЪБДБКФЕ РХУФПК УМПЧБТШ.

чЩ НПЦЕФЕ ОБРТБЧЙФШ РЙУШНП БДНЙОЙУФТБФПТХ ЬФПК УФТБОЙЮЛЙ, бМЕЛУЕА рБХФПЧХ.

Источник

# Copyright (c) 2009, 2022, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, as # published by the Free Software Foundation. # # This program is also distributed with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, # as designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an # additional permission to link the program and your derivative works # with the separately licensed software that they have included with # MySQL. # # Without limiting anything contained in the foregoing, this file, # which is part of MySQL Connector/Python, is also subject to the # Universal FOSS Exception, version 1.0, a copy of which can be found at # http://oss.oracle.com/licenses/universal-foss-exception. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License, version 2.0, for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA «»»Python exceptions.»»» from typing import Dict, Mapping, Optional, Tuple, Type, Union from .locales import get_client_error from .types import StrOrBytes from .utils import read_bytes, read_int class Error(Exception): «»»Exception that is base class for all other error exceptions»»» def __init__( self, msg: Optional[str] = None, errno: Optional[int] = None, values: Optional[Tuple[Union[int, str], …]] = None, sqlstate: Optional[str] = None, ) -> None: super().__init__() self.msg = msg self._full_msg = self.msg self.errno = errno or 1 self.sqlstate = sqlstate if not self.msg and (2000 <= self.errno < 3000): self.msg = get_client_error(self.errno) if values is not None: try: self.msg = self.msg % values except TypeError as err: self.msg = {self.msg} (Warning: {err} elif not self.msg: self._full_msg = self.msg = «Unknown error» if self.msg and self.errno != 1: fields = {«errno»: self.errno, «msg»: self.msg} if self.sqlstate: fmt = «{errno} ({state}): {msg}» fields[«state»] = self.sqlstate else: fmt = «{errno}: {msg}» self._full_msg = fmt.format(**fields) self.args = (self.errno, self._full_msg, self.sqlstate) def __str__(self) -> str: return self._full_msg class Warning(Exception): # pylint: disable=redefined-builtin «»»Exception for important warnings»»» class InterfaceError(Error): «»»Exception for errors related to the interface»»» class DatabaseError(Error): «»»Exception for errors related to the database»»» class InternalError(DatabaseError): «»»Exception for errors internal database errors»»» class OperationalError(DatabaseError): «»»Exception for errors related to the database’s operation»»» class ProgrammingError(DatabaseError): «»»Exception for errors programming errors»»» class IntegrityError(DatabaseError): «»»Exception for errors regarding relational integrity»»» class DataError(DatabaseError): «»»Exception for errors reporting problems with processed data»»» class NotSupportedError(DatabaseError): «»»Exception for errors when an unsupported database feature was used»»» class PoolError(Error): «»»Exception for errors relating to connection pooling»»» ErrorClassTypes = Union[ Type[Error], Type[InterfaceError], Type[DatabaseError], Type[InternalError], Type[OperationalError], Type[ProgrammingError], Type[IntegrityError], Type[DataError], Type[NotSupportedError], Type[PoolError], ] ErrorTypes = Union[ Error, InterfaceError, DatabaseError, InternalError, OperationalError, ProgrammingError, IntegrityError, DataError, NotSupportedError, PoolError, Warning, ] # _CUSTOM_ERROR_EXCEPTIONS holds custom exceptions and is used by the # function custom_error_exception. _ERROR_EXCEPTIONS (at bottom of module) # is similar, but hardcoded exceptions. _CUSTOM_ERROR_EXCEPTIONS: Dict[int, ErrorClassTypes] = {} def custom_error_exception( error: Optional[Union[int, Dict[int, Optional[ErrorClassTypes]]]] = None, exception: Optional[ErrorClassTypes] = None, ) -> Mapping[int, Optional[ErrorClassTypes]]: «»»Define custom exceptions for MySQL server errors This function defines custom exceptions for MySQL server errors and returns the current set customizations. If error is a MySQL Server error number, then you have to pass also the exception class. The error argument can also be a dictionary in which case the key is the server error number, and value the exception to be raised. If none of the arguments are given, then custom_error_exception() will simply return the current set customizations. To reset the customizations, simply supply an empty dictionary. Examples: import mysql.connector from mysql.connector import errorcode # Server error 1028 should raise a DatabaseError mysql.connector.custom_error_exception( 1028, mysql.connector.DatabaseError) # Or using a dictionary: mysql.connector.custom_error_exception({ 1028: mysql.connector.DatabaseError, 1029: mysql.connector.OperationalError, }) # Reset mysql.connector.custom_error_exception({}) Returns a dictionary. «»» global _CUSTOM_ERROR_EXCEPTIONS # pylint: disable=global-statement if isinstance(error, dict) and not error: _CUSTOM_ERROR_EXCEPTIONS = {} return _CUSTOM_ERROR_EXCEPTIONS if not error and not exception: return _CUSTOM_ERROR_EXCEPTIONS if not isinstance(error, (int, dict)): raise ValueError(«The error argument should be either an integer or dictionary») if isinstance(error, int): error = {error: exception} for errno, _exception in error.items(): if not isinstance(errno, int): raise ValueError(«Error number should be an integer») try: if _exception is None or not issubclass(_exception, Exception): raise TypeError except TypeError as err: raise ValueError(«Exception should be subclass of Exception») from err _CUSTOM_ERROR_EXCEPTIONS[errno] = _exception return _CUSTOM_ERROR_EXCEPTIONS def get_mysql_exception( errno: int, msg: Optional[str] = None, sqlstate: Optional[str] = None, warning: Optional[bool] = False, ) -> ErrorTypes: «»»Get the exception matching the MySQL error This function will return an exception based on the SQLState. The given message will be passed on in the returned exception. The exception returned can be customized using the mysql.connector.custom_error_exception() function. Returns an Exception «»» try: return _CUSTOM_ERROR_EXCEPTIONS[errno](msg=msg, errno=errno, sqlstate=sqlstate) except KeyError: # Error was not mapped to particular exception pass try: return _ERROR_EXCEPTIONS[errno](msg=msg, errno=errno, sqlstate=sqlstate) except KeyError: # Error was not mapped to particular exception pass if not sqlstate: if warning: return Warning(errno, msg) return DatabaseError(msg=msg, errno=errno) try: return _SQLSTATE_CLASS_EXCEPTION[sqlstate[0:2]]( msg=msg, errno=errno, sqlstate=sqlstate ) except KeyError: # Return default InterfaceError return DatabaseError(msg=msg, errno=errno, sqlstate=sqlstate) def get_exception(packet: bytes) -> ErrorTypes: «»»Returns an exception object based on the MySQL error Returns an exception object based on the MySQL error in the given packet. Returns an Error-Object. «»» errno = errmsg = None try: if packet[4] != 255: raise ValueError(«Packet is not an error packet») except IndexError as err: return InterfaceError(f»Failed getting Error information ({err}) sqlstate: Optional[StrOrBytes] = None try: packet = packet[5:] packet, errno = read_int(packet, 2) if packet[0] != 35: # Error without SQLState if isinstance(packet, (bytes, bytearray)): errmsg = packet.decode(«utf8») else: errmsg = packet else: packet, sqlstate = read_bytes(packet[1:], 5) sqlstate = sqlstate.decode(«utf8») errmsg = packet.decode(«utf8») except (IndexError, UnicodeError) as err: return InterfaceError(f»Failed getting Error information ({err}) else: return get_mysql_exception(errno, errmsg, sqlstate) # type: ignore[arg-type] _SQLSTATE_CLASS_EXCEPTION: Dict[str, ErrorClassTypes] = { «02»: DataError, # no data «07»: DatabaseError, # dynamic SQL error «08»: OperationalError, # connection exception «0A»: NotSupportedError, # feature not supported «21»: DataError, # cardinality violation «22»: DataError, # data exception «23»: IntegrityError, # integrity constraint violation «24»: ProgrammingError, # invalid cursor state «25»: ProgrammingError, # invalid transaction state «26»: ProgrammingError, # invalid SQL statement name «27»: ProgrammingError, # triggered data change violation «28»: ProgrammingError, # invalid authorization specification «2A»: ProgrammingError, # direct SQL syntax error or access rule violation «2B»: DatabaseError, # dependent privilege descriptors still exist «2C»: ProgrammingError, # invalid character set name «2D»: DatabaseError, # invalid transaction termination «2E»: DatabaseError, # invalid connection name «33»: DatabaseError, # invalid SQL descriptor name «34»: ProgrammingError, # invalid cursor name «35»: ProgrammingError, # invalid condition number «37»: ProgrammingError, # dynamic SQL syntax error or access rule violation «3C»: ProgrammingError, # ambiguous cursor name «3D»: ProgrammingError, # invalid catalog name «3F»: ProgrammingError, # invalid schema name «40»: InternalError, # transaction rollback «42»: ProgrammingError, # syntax error or access rule violation «44»: InternalError, # with check option violation «HZ»: OperationalError, # remote database access «XA»: IntegrityError, «0K»: OperationalError, «HY»: DatabaseError, # default when no SQLState provided by MySQL server } _ERROR_EXCEPTIONS: Dict[int, ErrorClassTypes] = { 1243: ProgrammingError, 1210: ProgrammingError, 2002: InterfaceError, 2013: OperationalError, 2049: NotSupportedError, 2055: OperationalError, 2061: InterfaceError, 2026: InterfaceError, }
  • Начало работы с 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;

Обновление данных в Python MySQL

Во-вторых, мы запускаем модуль.

В-третьих, мы выбираем запись книги, снова выполнив оператор SELECT, чтобы увидеть, действительно ли запись изменилась.

Обновление данных в Python MySQL - 2

Все работает, как ожидалось.

В этом разделе вы рассказали, как обновлять данные с помощью 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;

Удаление данных в MySQL на Python

После запуска приведенного выше модуля, мы снова выполняем оператор 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()

Обратите внимание, что для тестирования вы можете использовать следующую фотографию и поместить ее в папку изображений:

Обновление в Python BLOB-данных

Внутри основной функции, мы вызываем функцию update_blob() для обновления столбца фото для автора с идентификатором 144. Чтобы проверить результат, мы выбираем данные из таблицы authors:

SELECT * FROM authors
WHERE id = 144;

Обновление в Python BLOB-данных - 2

Все работает, как ожидалось.

В этом примере мы выбираем 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.

Понравилась статья? Поделить с друзьями:
  • Mysql connect error the server requested authentication method unknown to the client
  • Mysql connect error localhost 2006 mysql server has gone away 400
  • Mysql connect error localhost 2002 no such file or directory 400 битрикс
  • Mysql connect error localhost 2002 connection refused 400 битрикс
  • Mysql connect error localhost 2002 connection refused 400 bitrix