Spec-Zone .ru
спецификации, руководства, описания, API
|
mysql.connector.errors
модуль определяет классы исключений для ошибок и
предупреждений, повышенных MySQL, Connector/Python. Большинство классов, определенных в этом модуле, доступно,
когда Вы импортируете mysql.connector
.
Классы исключений, определенные в этом модуле главным образом, следуют за Спецификацией v2.0 Базы данных Python (PEP 249). Для некоторого клиента MySQL или ошибок сервера это является не всегда четким который исключение повысить. Хорошо обсудить, должна ли ошибка быть повторно классифицирована, открывая отчет об ошибках.
Ошибки MySQL Server отображаются с исключением Python, основанным на их значении SQLSTATE (см. Раздел
C.3, "Коды ошибки сервера и сообщения"). Следующая таблица показывает классы SQLSTATE и повышения
Соединителя/Python исключения., однако, возможно пересмотреть, какое исключение повышается для каждой ошибки
сервера. Отметьте, что исключение значения по умолчанию DatabaseError
.
Таблица 21.34.
Класс 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 |
Этот модуль содержит и сервер MySQL и клиентские коды ошибки, определенные, поскольку модуль приписывает с кодом ошибки как значение. Используя коды ошибки вместо кодов ошибки мог сделать чтение исходного кода немного легче.
>>> from mysql.connector import errorcode>>> errorcode.ER_BAD_TABLE_ERROR1051
См. Раздел C.3, "Коды ошибки сервера и сообщения" и Раздел C.4, "Клиентские Коды ошибки и сообщения".
Этим исключением является основной class для всех других исключений в errors
модуль. Это может использоваться, чтобы зафиксировать все ошибки в сингле except
оператор.
Следующий пример показывает, как мы могли поймать синтаксические ошибки:
import mysql.connectortry: cnx = mysql.connector.connect(user='scott', database='employees') cursor = cnx.cursor() cursor.execute("SELECT * FORM employees") # Syntax error in query cnx.close()except mysql.connector.Error as err: print("Something went wrong: {}".format(err))
Инициализация исключения поддерживает несколько дополнительных параметров, а именно, msg
,
errno
, values
и sqlstate
. Все они являются дополнительными и значение по умолчанию к None
. errors.Error
внутренне используется
Соединителем/Python, чтобы повысить ошибки клиента и сервера MySQL и не должен использоваться Вашим
приложением, чтобы повысить исключения.
Следующие примеры показывают результат при использовании никаких параметров или комбинации параметров:
>>> from mysql.connector.errors import Error>>> str(Error())'Unknown error'>>> str(Error("Oops! There was an error."))'Oops! There was an error.'>>> str(Error(errno=2006))'2006: MySQL server has gone away'>>> str(Error(errno=2002, values=('/tmp/mysql.sock', 2)))"2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)">>> str(Error(errno=1146, sqlstate='42S02', msg="Table 'test.spam' doesn't exist"))"1146 (42S02): Table 'test.spam' doesn't exist"
Пример, который использует код ошибки 1146, используется, когда Соединитель/Python получает ошибочный пакет
от MySQL Server. Информация анализируется и передается к Error
исключение как
показано.
Каждое разделение на подклассы исключения от Error
может быть инициализирован,
используя ранее упомянутые параметры. Дополнительно, у каждого экземпляра есть атрибуты errno
, msg
и sqlstate
который может использоваться в Вашем коде.
Следующий пример показывает, как обработать ошибки, отбрасывая таблицу, которая не существует (когда DROP
TABLE
оператор не включает a IF EXISTS
пункт):
import mysql.connectorfrom mysql.connector import errorcodecnx = mysql.connector.connect(user='scott', database='test')try: cur.execute("DROP TABLE spam")except mysql.connector.Error as err: if err.errno == errorcode.ER_BAD_TABLE_ERROR: print("Creating table spam") else: raise
errors.Error
подкласс Python StandardError
.
Это исключение используется для того, чтобы сообщить о важных предупреждениях, однако, Соединитель/Python не использует его. Это включается, чтобы быть совместимым со Спецификацией v2.0 Базы данных Python (PEP 249).
Рассмотрите использование или более строгих Режимов SQL Сервера или raise_on_warnings параметра соединения, чтобы сделать ошибки повышения Соединителя/Python, когда Ваши запросы производят предупреждения.
errors.Warning
подкласс Python StandardError
.
Это исключение повышается для ошибок, происходящих из Соединителя/Python непосредственно, не связывается с сервером MySQL.
errors.InterfaceError
подкласс errors.Error
.
Это исключение является значением по умолчанию для любой ошибки MySQL, которая не соответствует другим исключениям.
errors.DatabaseError
подкласс errors.Error
.
Это исключение повышается, когда сервер MySQL встречается с внутренней ошибкой, например, когда мертвая блокировка произошла.
errors.InternalError
подкласс errors.DatabaseError
.
Это исключение повышается для ошибок, которые связываются с операциями MySQL. Например: слишком много соединений; имя хоста не могло быть разрешено; плохое квитирование; сервер завершает работу, коммуникационные ошибки.
errors.OperationalError
подкласс errors.DatabaseError
.
Это исключение повышается при программировании ошибок, например когда у Вас есть синтаксическая ошибка в Вашем SQL, или таблица не была найдена.
Следующий пример показывает, как обработать синтаксические ошибки:
try: cursor.execute("CREATE DESK t1 (id int, PRIMARY KEY (id))")except mysql.connector.ProgrammingError as err: if err.errno == errorcode.ER_SYNTAX_ERROR: print("Check your syntax!") else: print("Error: {}".format(err))
errors.ProgrammingError
подкласс errors.DatabaseError
.
Это исключение повышается, когда на реляционную целостность данных влияют. Например, двойной ключ был вставлен, или ограничение внешнего ключа перестанет работать.
Следующий пример показывает двойную ключевую ошибку, повышенную как IntegrityError:
cursor.execute("CREATE TABLE t1 (id int, PRIMARY KEY (id))")try: cursor.execute("INSERT INTO t1 (id) VALUES (1)") cursor.execute("INSERT INTO t1 (id) VALUES (1)")except mysql.connector.IntegrityError as err: print("Error: {}".format(err))
errors.IntegrityError
подкласс errors.DatabaseError
.
Это исключение повышается, когда были проблемы с данными. Примерами является набор столбца к NULL
это не может быть NULL
, значения из диапазона
для столбца, подразделения нулем, количество столбца не соответствует количество значения и так далее.
errors.DataError
подкласс errors.DatabaseError
.
Это исключение повышается, когда некоторая функция была использована, который не поддерживается версией MySQL, который возвратил ошибку. Это также повышается при использовании функций или операторов, которые не поддерживаются сохраненными подпрограммами.
errors.NotSupportedError
подкласс errors.DatabaseError
.
Этот метод определяет пользовательские исключения для ошибок сервера MySQL и возвращает текущие настройки.
Если error
код ошибки MySQL Server, следует также передать exception
class. error
параметром может быть
словарь, когда ключ является кодом ошибки сервера, и оцените class исключения, которое будет повышено.
Чтобы сбросить настройки, предоставьте пустой словарь.
import mysql.connectorfrom mysql.connector import errorcode# Server error 1028 should raise a DatabaseErrormysql.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,})# To reset, pass an empty dictionary:mysql.connector.custom_error_exception({})