summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects/mysql/mysqlconnector.py')
-rw-r--r--lib/sqlalchemy/dialects/mysql/mysqlconnector.py125
1 files changed, 68 insertions, 57 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
index e16b68bad..9c1502a14 100644
--- a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
+++ b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
@@ -47,9 +47,13 @@ are contributed to SQLAlchemy.
"""
-from .base import (MySQLDialect, MySQLExecutionContext,
- MySQLCompiler, MySQLIdentifierPreparer,
- BIT)
+from .base import (
+ MySQLDialect,
+ MySQLExecutionContext,
+ MySQLCompiler,
+ MySQLIdentifierPreparer,
+ BIT,
+)
from ... import util
import re
@@ -57,7 +61,6 @@ from ... import processors
class MySQLExecutionContext_mysqlconnector(MySQLExecutionContext):
-
def get_lastrowid(self):
return self.cursor.lastrowid
@@ -65,21 +68,27 @@ class MySQLExecutionContext_mysqlconnector(MySQLExecutionContext):
class MySQLCompiler_mysqlconnector(MySQLCompiler):
def visit_mod_binary(self, binary, operator, **kw):
if self.dialect._mysqlconnector_double_percents:
- return self.process(binary.left, **kw) + " %% " + \
- self.process(binary.right, **kw)
+ return (
+ self.process(binary.left, **kw)
+ + " %% "
+ + self.process(binary.right, **kw)
+ )
else:
- return self.process(binary.left, **kw) + " % " + \
- self.process(binary.right, **kw)
+ return (
+ self.process(binary.left, **kw)
+ + " % "
+ + self.process(binary.right, **kw)
+ )
def post_process_text(self, text):
if self.dialect._mysqlconnector_double_percents:
- return text.replace('%', '%%')
+ return text.replace("%", "%%")
else:
return text
def escape_literal_column(self, text):
if self.dialect._mysqlconnector_double_percents:
- return text.replace('%', '%%')
+ return text.replace("%", "%%")
else:
return text
@@ -109,7 +118,7 @@ class _myconnpyBIT(BIT):
class MySQLDialect_mysqlconnector(MySQLDialect):
- driver = 'mysqlconnector'
+ driver = "mysqlconnector"
supports_unicode_binds = True
@@ -118,28 +127,22 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
supports_native_decimal = True
- default_paramstyle = 'format'
+ default_paramstyle = "format"
execution_ctx_cls = MySQLExecutionContext_mysqlconnector
statement_compiler = MySQLCompiler_mysqlconnector
preparer = MySQLIdentifierPreparer_mysqlconnector
- colspecs = util.update_copy(
- MySQLDialect.colspecs,
- {
- BIT: _myconnpyBIT,
- }
- )
+ colspecs = util.update_copy(MySQLDialect.colspecs, {BIT: _myconnpyBIT})
def __init__(self, *arg, **kw):
super(MySQLDialect_mysqlconnector, self).__init__(*arg, **kw)
# hack description encoding since mysqlconnector randomly
# returns bytes or not
- self._description_decoder = \
- processors.to_conditional_unicode_processor_factory(
- self.description_encoding
- )
+ self._description_decoder = processors.to_conditional_unicode_processor_factory(
+ self.description_encoding
+ )
def _check_unicode_description(self, connection):
# hack description encoding since mysqlconnector randomly
@@ -158,6 +161,7 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
@classmethod
def dbapi(cls):
from mysql import connector
+
return connector
def do_ping(self, dbapi_connection):
@@ -172,54 +176,52 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
return True
def create_connect_args(self, url):
- opts = url.translate_connect_args(username='user')
+ opts = url.translate_connect_args(username="user")
opts.update(url.query)
- util.coerce_kw_type(opts, 'allow_local_infile', bool)
- util.coerce_kw_type(opts, 'autocommit', bool)
- util.coerce_kw_type(opts, 'buffered', bool)
- util.coerce_kw_type(opts, 'compress', bool)
- util.coerce_kw_type(opts, 'connection_timeout', int)
- util.coerce_kw_type(opts, 'connect_timeout', int)
- util.coerce_kw_type(opts, 'consume_results', bool)
- util.coerce_kw_type(opts, 'force_ipv6', bool)
- util.coerce_kw_type(opts, 'get_warnings', bool)
- util.coerce_kw_type(opts, 'pool_reset_session', bool)
- util.coerce_kw_type(opts, 'pool_size', int)
- util.coerce_kw_type(opts, 'raise_on_warnings', bool)
- util.coerce_kw_type(opts, 'raw', bool)
- util.coerce_kw_type(opts, 'ssl_verify_cert', bool)
- util.coerce_kw_type(opts, 'use_pure', bool)
- util.coerce_kw_type(opts, 'use_unicode', bool)
+ util.coerce_kw_type(opts, "allow_local_infile", bool)
+ util.coerce_kw_type(opts, "autocommit", bool)
+ util.coerce_kw_type(opts, "buffered", bool)
+ util.coerce_kw_type(opts, "compress", bool)
+ util.coerce_kw_type(opts, "connection_timeout", int)
+ util.coerce_kw_type(opts, "connect_timeout", int)
+ util.coerce_kw_type(opts, "consume_results", bool)
+ util.coerce_kw_type(opts, "force_ipv6", bool)
+ util.coerce_kw_type(opts, "get_warnings", bool)
+ util.coerce_kw_type(opts, "pool_reset_session", bool)
+ util.coerce_kw_type(opts, "pool_size", int)
+ util.coerce_kw_type(opts, "raise_on_warnings", bool)
+ util.coerce_kw_type(opts, "raw", bool)
+ util.coerce_kw_type(opts, "ssl_verify_cert", bool)
+ util.coerce_kw_type(opts, "use_pure", bool)
+ util.coerce_kw_type(opts, "use_unicode", bool)
# unfortunately, MySQL/connector python refuses to release a
# cursor without reading fully, so non-buffered isn't an option
- opts.setdefault('buffered', True)
+ opts.setdefault("buffered", True)
# FOUND_ROWS must be set in ClientFlag to enable
# supports_sane_rowcount.
if self.dbapi is not None:
try:
from mysql.connector.constants import ClientFlag
+
client_flags = opts.get(
- 'client_flags', ClientFlag.get_default())
+ "client_flags", ClientFlag.get_default()
+ )
client_flags |= ClientFlag.FOUND_ROWS
- opts['client_flags'] = client_flags
+ opts["client_flags"] = client_flags
except Exception:
pass
return [[], opts]
@util.memoized_property
def _mysqlconnector_version_info(self):
- if self.dbapi and hasattr(self.dbapi, '__version__'):
- m = re.match(r'(\d+)\.(\d+)(?:\.(\d+))?',
- self.dbapi.__version__)
+ if self.dbapi and hasattr(self.dbapi, "__version__"):
+ m = re.match(r"(\d+)\.(\d+)(?:\.(\d+))?", self.dbapi.__version__)
if m:
- return tuple(
- int(x)
- for x in m.group(1, 2, 3)
- if x is not None)
+ return tuple(int(x) for x in m.group(1, 2, 3) if x is not None)
@util.memoized_property
def _mysqlconnector_double_percents(self):
@@ -235,9 +237,11 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
errnos = (2006, 2013, 2014, 2045, 2055, 2048)
exceptions = (self.dbapi.OperationalError, self.dbapi.InterfaceError)
if isinstance(e, exceptions):
- return e.errno in errnos or \
- "MySQL Connection not available." in str(e) or \
- "Connection to MySQL is not available" in str(e)
+ return (
+ e.errno in errnos
+ or "MySQL Connection not available." in str(e)
+ or "Connection to MySQL is not available" in str(e)
+ )
else:
return False
@@ -247,17 +251,24 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
def _compat_fetchone(self, rp, charset=None):
return rp.fetchone()
- _isolation_lookup = set(['SERIALIZABLE', 'READ UNCOMMITTED',
- 'READ COMMITTED', 'REPEATABLE READ',
- 'AUTOCOMMIT'])
+ _isolation_lookup = set(
+ [
+ "SERIALIZABLE",
+ "READ UNCOMMITTED",
+ "READ COMMITTED",
+ "REPEATABLE READ",
+ "AUTOCOMMIT",
+ ]
+ )
def _set_isolation_level(self, connection, level):
- if level == 'AUTOCOMMIT':
+ if level == "AUTOCOMMIT":
connection.autocommit = True
else:
connection.autocommit = False
super(MySQLDialect_mysqlconnector, self)._set_isolation_level(
- connection, level)
+ connection, level
+ )
dialect = MySQLDialect_mysqlconnector