summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2021-11-21 21:17:27 +0100
committerMike Bayer <mike_mp@zzzcomputing.com>2021-11-24 22:51:27 -0500
commit31acba8ff7c123a20ae308b7f4ab6df3df264b48 (patch)
treea4c39a2123e1b95edf17995ba85bb69ee619f6e4 /lib/sqlalchemy/dialects
parentd3a4e96196cd47858de072ae589c6554088edc24 (diff)
downloadsqlalchemy-31acba8ff7c123a20ae308b7f4ab6df3df264b48.tar.gz
Clean up most py3k compat
Change-Id: I8172fdcc3103ff92aa049827728484c8779af6b7
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py13
-rw-r--r--lib/sqlalchemy/dialects/mssql/pyodbc.py4
-rw-r--r--lib/sqlalchemy/dialects/mysql/__init__.py6
-rw-r--r--lib/sqlalchemy/dialects/mysql/asyncmy.py3
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py18
-rw-r--r--lib/sqlalchemy/dialects/mysql/cymysql.py2
-rw-r--r--lib/sqlalchemy/dialects/mysql/enumerated.py8
-rw-r--r--lib/sqlalchemy/dialects/mysql/json.py3
-rw-r--r--lib/sqlalchemy/dialects/mysql/mysqlconnector.py40
-rw-r--r--lib/sqlalchemy/dialects/mysql/pymysql.py11
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py13
-rw-r--r--lib/sqlalchemy/dialects/oracle/cx_oracle.py7
-rw-r--r--lib/sqlalchemy/dialects/postgresql/__init__.py4
-rw-r--r--lib/sqlalchemy/dialects/postgresql/array.py4
-rw-r--r--lib/sqlalchemy/dialects/postgresql/asyncpg.py5
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py38
-rw-r--r--lib/sqlalchemy/dialects/postgresql/dml.py4
-rw-r--r--lib/sqlalchemy/dialects/postgresql/ext.py4
-rw-r--r--lib/sqlalchemy/dialects/postgresql/hstore.py3
-rw-r--r--lib/sqlalchemy/dialects/postgresql/json.py11
-rw-r--r--lib/sqlalchemy/dialects/postgresql/pg8000.py2
-rw-r--r--lib/sqlalchemy/dialects/postgresql/psycopg2.py4
-rw-r--r--lib/sqlalchemy/dialects/sqlite/__init__.py5
-rw-r--r--lib/sqlalchemy/dialects/sqlite/base.py6
-rw-r--r--lib/sqlalchemy/dialects/sqlite/pysqlcipher.py21
25 files changed, 88 insertions, 151 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index e5745bf69..353c78c76 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -847,7 +847,6 @@ from ...types import NVARCHAR
from ...types import SMALLINT
from ...types import TEXT
from ...types import VARCHAR
-from ...util import compat
from ...util import update_wrapper
from ...util.langhelpers import public_factory
@@ -1084,7 +1083,7 @@ class _MSDate(sqltypes.Date):
def process(value):
if isinstance(value, datetime.datetime):
return value.date()
- elif isinstance(value, util.string_types):
+ elif isinstance(value, str):
m = self._reg.match(value)
if not m:
raise ValueError(
@@ -1126,7 +1125,7 @@ class TIME(sqltypes.TIME):
def process(value):
if isinstance(value, datetime.datetime):
return value.time()
- elif isinstance(value, util.string_types):
+ elif isinstance(value, str):
m = self._reg.match(value)
if not m:
raise ValueError(
@@ -2383,9 +2382,7 @@ class MSDDLCompiler(compiler.DDLCompiler):
# handle other included columns
if index.dialect_options["mssql"]["include"]:
inclusions = [
- index.table.c[col]
- if isinstance(col, util.string_types)
- else col
+ index.table.c[col] if isinstance(col, str) else col
for col in index.dialect_options["mssql"]["include"]
]
@@ -3256,8 +3253,8 @@ class MSDialect(default.DefaultDialect):
cdict["identity"] = {}
else:
if isinstance(coltype, sqltypes.BigInteger):
- start = compat.long_type(identity_start)
- increment = compat.long_type(identity_increment)
+ start = int(identity_start)
+ increment = int(identity_increment)
elif isinstance(coltype, sqltypes.Integer):
start = int(identity_start)
increment = int(identity_increment)
diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py
index 6ce55d392..7bcc2a467 100644
--- a/lib/sqlalchemy/dialects/mssql/pyodbc.py
+++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py
@@ -398,7 +398,7 @@ class _ODBCDateTimeBindProcessor:
def process(value):
if value is None:
return None
- elif isinstance(value, util.string_types):
+ elif isinstance(value, str):
# if a string was passed directly, allow it through
return value
elif not value.tzinfo or (not self.timezone and not self.has_tz):
@@ -577,7 +577,7 @@ class MSDialect_pyodbc(PyODBCConnector, MSDialect):
tup[4],
tup[5],
tup[6] // 1000,
- util.timezone(
+ datetime.timezone(
datetime.timedelta(hours=tup[7], minutes=tup[8])
),
)
diff --git a/lib/sqlalchemy/dialects/mysql/__init__.py b/lib/sqlalchemy/dialects/mysql/__init__.py
index 9fe6f6d84..389720213 100644
--- a/lib/sqlalchemy/dialects/mysql/__init__.py
+++ b/lib/sqlalchemy/dialects/mysql/__init__.py
@@ -5,6 +5,8 @@
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
+from . import aiomysql # noqa
+from . import asyncmy # noqa
from . import base # noqa
from . import cymysql # noqa
from . import mariadbconnector # noqa
@@ -51,10 +53,6 @@ from .dml import insert
from .expression import match
from ...util import compat
-if compat.py3k:
- from . import aiomysql # noqa
- from . import asyncmy # noqa
-
# default dialect
base.dialect = dialect = mysqldb.dialect
diff --git a/lib/sqlalchemy/dialects/mysql/asyncmy.py b/lib/sqlalchemy/dialects/mysql/asyncmy.py
index 0fca338f5..b59571460 100644
--- a/lib/sqlalchemy/dialects/mysql/asyncmy.py
+++ b/lib/sqlalchemy/dialects/mysql/asyncmy.py
@@ -28,11 +28,12 @@ This dialect should normally be used only with the
""" # noqa
+from contextlib import asynccontextmanager
+
from .pymysql import MySQLDialect_pymysql
from ... import pool
from ... import util
from ...engine import AdaptedConnection
-from ...util.concurrency import asynccontextmanager
from ...util.concurrency import asyncio
from ...util.concurrency import await_fallback
from ...util.concurrency import await_only
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index 54fe1f57f..f77d839f3 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -1469,7 +1469,7 @@ class MySQLCompiler(compiler.SQLCompiler):
keywords at the start of a SELECT.
"""
- if isinstance(select._distinct, util.string_types):
+ if isinstance(select._distinct, str):
util.warn_deprecated(
"Sending string values for 'distinct' is deprecated in the "
"MySQL dialect and will be removed in a future release. "
@@ -2425,7 +2425,7 @@ class MySQLDialect(default.DefaultDialect):
raise NotImplementedError()
val = row[0]
cursor.close()
- if util.py3k and isinstance(val, bytes):
+ if isinstance(val, bytes):
val = val.decode()
return val.upper().replace("-", " ")
@@ -2456,7 +2456,7 @@ class MySQLDialect(default.DefaultDialect):
cursor.execute("SELECT VERSION()")
val = cursor.fetchone()[0]
cursor.close()
- if util.py3k and isinstance(val, bytes):
+ if isinstance(val, bytes):
val = val.decode()
return self._parse_server_version(val)
@@ -2607,8 +2607,8 @@ class MySQLDialect(default.DefaultDialect):
sql.bindparam("table_name", type_=Unicode),
),
{
- "table_schema": util.text_type(schema),
- "table_name": util.text_type(table_name),
+ "table_schema": str(schema),
+ "table_name": str(table_name),
},
)
return bool(rs.scalar())
@@ -2627,8 +2627,8 @@ class MySQLDialect(default.DefaultDialect):
"TABLE_SCHEMA=:schema_name"
),
dict(
- name=util.text_type(sequence_name),
- schema_name=util.text_type(schema),
+ name=str(sequence_name),
+ schema_name=str(schema),
),
)
return cursor.first() is not None
@@ -3228,7 +3228,7 @@ class _DecodingRow:
if isinstance(item, _array):
item = item.tostring()
- if self.charset and isinstance(item, util.binary_type):
+ if self.charset and isinstance(item, bytes):
return item.decode(self.charset)
else:
return item
@@ -3237,7 +3237,7 @@ class _DecodingRow:
item = getattr(self.rowproxy, attr)
if isinstance(item, _array):
item = item.tostring()
- if self.charset and isinstance(item, util.binary_type):
+ if self.charset and isinstance(item, bytes):
return item.decode(self.charset)
else:
return item
diff --git a/lib/sqlalchemy/dialects/mysql/cymysql.py b/lib/sqlalchemy/dialects/mysql/cymysql.py
index f729e4a18..4fe441031 100644
--- a/lib/sqlalchemy/dialects/mysql/cymysql.py
+++ b/lib/sqlalchemy/dialects/mysql/cymysql.py
@@ -33,7 +33,7 @@ class _cymysqlBIT(BIT):
def process(value):
if value is not None:
v = 0
- for i in util.iterbytes(value):
+ for i in iter(value):
v = v << 8 | i
return v
return value
diff --git a/lib/sqlalchemy/dialects/mysql/enumerated.py b/lib/sqlalchemy/dialects/mysql/enumerated.py
index 9f9a838c5..b84608f58 100644
--- a/lib/sqlalchemy/dialects/mysql/enumerated.py
+++ b/lib/sqlalchemy/dialects/mysql/enumerated.py
@@ -201,7 +201,7 @@ class SET(_StringType):
super_convert = super(SET, self).result_processor(dialect, coltype)
def process(value):
- if isinstance(value, util.string_types):
+ if isinstance(value, str):
# MySQLdb returns a string, let's parse
if super_convert:
value = super_convert(value)
@@ -222,7 +222,7 @@ class SET(_StringType):
def process(value):
if value is None:
return None
- elif isinstance(value, util.int_types + util.string_types):
+ elif isinstance(value, (int, str)):
if super_convert:
return super_convert(value)
else:
@@ -237,9 +237,7 @@ class SET(_StringType):
def process(value):
# accept strings and int (actually bitflag) values directly
- if value is not None and not isinstance(
- value, util.int_types + util.string_types
- ):
+ if value is not None and not isinstance(value, (int, str)):
value = ",".join(value)
if super_convert:
diff --git a/lib/sqlalchemy/dialects/mysql/json.py b/lib/sqlalchemy/dialects/mysql/json.py
index 384d3b9b6..c46878fc3 100644
--- a/lib/sqlalchemy/dialects/mysql/json.py
+++ b/lib/sqlalchemy/dialects/mysql/json.py
@@ -4,9 +4,6 @@
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
-
-from __future__ import absolute_import
-
from ... import types as sqltypes
diff --git a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
index fef4f14ca..7b62e9ed1 100644
--- a/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
+++ b/lib/sqlalchemy/dialects/mysql/mysqlconnector.py
@@ -32,36 +32,17 @@ from ... import util
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)
- )
- else:
- 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("%", "%%")
- else:
- return text
-
- def escape_literal_column(self, text):
- if self.dialect._mysqlconnector_double_percents:
- return text.replace("%", "%%")
- else:
- return text
+ return (
+ self.process(binary.left, **kw)
+ + " % "
+ + self.process(binary.right, **kw)
+ )
class MySQLIdentifierPreparer_mysqlconnector(MySQLIdentifierPreparer):
@property
def _double_percents(self):
- return self.dialect._mysqlconnector_double_percents
+ return False
@_double_percents.setter
def _double_percents(self, value):
@@ -69,10 +50,7 @@ class MySQLIdentifierPreparer_mysqlconnector(MySQLIdentifierPreparer):
def _escape_identifier(self, value):
value = value.replace(self.escape_quote, self.escape_to_quote)
- if self.dialect._mysqlconnector_double_percents:
- return value.replace("%", "%%")
- else:
- return value
+ return value
class _myconnpyBIT(BIT):
@@ -163,10 +141,6 @@ class MySQLDialect_mysqlconnector(MySQLDialect):
if m:
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):
- return not util.py3k and self._mysqlconnector_version_info < (2, 0)
-
def _detect_charset(self, connection):
return connection.connection.charset
diff --git a/lib/sqlalchemy/dialects/mysql/pymysql.py b/lib/sqlalchemy/dialects/mysql/pymysql.py
index 3c30fb9ea..dd7bd8bda 100644
--- a/lib/sqlalchemy/dialects/mysql/pymysql.py
+++ b/lib/sqlalchemy/dialects/mysql/pymysql.py
@@ -39,7 +39,6 @@ to the pymysql driver as well.
from .mysqldb import MySQLDialect_mysqldb
from ...util import langhelpers
-from ...util import py3k
class MySQLDialect_pymysql(MySQLDialect_mysqldb):
@@ -81,12 +80,10 @@ class MySQLDialect_pymysql(MySQLDialect_mysqldb):
else:
return False
- if py3k:
-
- def _extract_error_code(self, exception):
- if isinstance(exception.args[0], Exception):
- exception = exception.args[0]
- return exception.args[0]
+ def _extract_error_code(self, exception):
+ if isinstance(exception.args[0], Exception):
+ exception = exception.args[0]
+ return exception.args[0]
dialect = MySQLDialect_pymysql
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index a1d0f80d6..7df2422b3 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -564,7 +564,6 @@ from ...types import NCHAR
from ...types import NVARCHAR
from ...types import TIMESTAMP
from ...types import VARCHAR
-from ...util import compat
RESERVED_WORDS = set(
"SHARE RAW DROP BETWEEN FROM DESC OPTION PRIOR LONG THEN "
@@ -1414,7 +1413,7 @@ class OracleIdentifierPreparer(compiler.IdentifierPreparer):
return (
lc_value in self.reserved_words
or value[0] in self.illegal_initial_characters
- or not self.legal_characters.match(util.text_type(value))
+ or not self.legal_characters.match(str(value))
)
def format_savepoint(self, savepoint):
@@ -2029,17 +2028,17 @@ class OracleDialect(default.DefaultDialect):
value = value.strip()
if "START WITH" in option:
- identity["start"] = compat.long_type(value)
+ identity["start"] = int(value)
elif "INCREMENT BY" in option:
- identity["increment"] = compat.long_type(value)
+ identity["increment"] = int(value)
elif "MAX_VALUE" in option:
- identity["maxvalue"] = compat.long_type(value)
+ identity["maxvalue"] = int(value)
elif "MIN_VALUE" in option:
- identity["minvalue"] = compat.long_type(value)
+ identity["minvalue"] = int(value)
elif "CYCLE_FLAG" in option:
identity["cycle"] = value == "Y"
elif "CACHE_SIZE" in option:
- identity["cache"] = compat.long_type(value)
+ identity["cache"] = int(value)
elif "ORDER_FLAG" in option:
identity["order"] = value == "Y"
return identity
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
index 2cfcb0e5c..07317126d 100644
--- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py
+++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
@@ -430,9 +430,6 @@ SQLAlchemy type (or a subclass of such).
as better integration of outputtypehandlers.
""" # noqa
-
-from __future__ import absolute_import
-
import decimal
import random
import re
@@ -1127,7 +1124,7 @@ class OracleDialect_cx_oracle(OracleDialect):
and default_type is not cx_Oracle.NCLOB
):
return cursor.var(
- util.text_type,
+ str,
size,
cursor.arraysize,
**dialect._cursor_var_unicode_kwargs
@@ -1213,7 +1210,7 @@ class OracleDialect_cx_oracle(OracleDialect):
opts.setdefault("threaded", self._cx_oracle_threaded)
def convert_cx_oracle_constant(value):
- if isinstance(value, util.string_types):
+ if isinstance(value, str):
try:
int_val = int(value)
except ValueError:
diff --git a/lib/sqlalchemy/dialects/postgresql/__init__.py b/lib/sqlalchemy/dialects/postgresql/__init__.py
index 056de66be..08b05dc74 100644
--- a/lib/sqlalchemy/dialects/postgresql/__init__.py
+++ b/lib/sqlalchemy/dialects/postgresql/__init__.py
@@ -4,6 +4,7 @@
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
+from . import asyncpg # noqa
from . import base
from . import pg8000 # noqa
from . import psycopg2 # noqa
@@ -57,9 +58,6 @@ from .ranges import TSRANGE
from .ranges import TSTZRANGE
from ...util import compat
-if compat.py3k:
- from . import asyncpg # noqa
-
base.dialect = dialect = psycopg2.dialect
diff --git a/lib/sqlalchemy/dialects/postgresql/array.py b/lib/sqlalchemy/dialects/postgresql/array.py
index 0cb574dac..614559035 100644
--- a/lib/sqlalchemy/dialects/postgresql/array.py
+++ b/lib/sqlalchemy/dialects/postgresql/array.py
@@ -374,12 +374,12 @@ class ARRAY(sqltypes.ARRAY):
def process(value):
if value is None:
return value
- # isinstance(value, util.string_types) is required to handle
+ # isinstance(value, str) is required to handle
# the case where a TypeDecorator for and Array of Enum is
# used like was required in sa < 1.3.17
return super_rp(
handle_raw_string(value)
- if isinstance(value, util.string_types)
+ if isinstance(value, str)
else value
)
diff --git a/lib/sqlalchemy/dialects/postgresql/asyncpg.py b/lib/sqlalchemy/dialects/postgresql/asyncpg.py
index fe1f9fd5a..d6cde0087 100644
--- a/lib/sqlalchemy/dialects/postgresql/asyncpg.py
+++ b/lib/sqlalchemy/dialects/postgresql/asyncpg.py
@@ -99,6 +99,7 @@ To disable the prepared statement cache, use a value of zero::
""" # noqa
import collections
+import collections.abc as collections_abc
import decimal
import json as _py_json
import re
@@ -216,8 +217,8 @@ class AsyncpgJSONStrIndexType(sqltypes.JSON.JSONStrIndexType):
class AsyncpgJSONPathType(json.JSONPathType):
def bind_processor(self, dialect):
def process(value):
- assert isinstance(value, util.collections_abc.Sequence)
- tokens = [util.text_type(elem) for elem in value]
+ assert isinstance(value, collections_abc.Sequence)
+ tokens = [str(elem) for elem in value]
return tokens
return process
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index 583d9c263..d00318fc8 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -1721,7 +1721,7 @@ class UUID(sqltypes.TypeEngine):
def coerce_compared_value(self, op, value):
"""See :meth:`.TypeEngine.coerce_compared_value` for a description."""
- if isinstance(value, util.string_types):
+ if isinstance(value, str):
return self
else:
return super(UUID, self).coerce_compared_value(op, value)
@@ -1731,7 +1731,7 @@ class UUID(sqltypes.TypeEngine):
def process(value):
if value is not None:
- value = util.text_type(value)
+ value = str(value)
return value
return process
@@ -2375,7 +2375,7 @@ class PGCompiler(compiler.SQLCompiler):
target_text = "(%s)" % ", ".join(
(
self.preparer.quote(c)
- if isinstance(c, util.string_types)
+ if isinstance(c, str)
else self.process(c, include_table=False, use_schema=False)
)
for c in clause.inferred_target_elements
@@ -2451,7 +2451,7 @@ class PGCompiler(compiler.SQLCompiler):
for k, v in set_parameters.items():
key_text = (
self.preparer.quote(k)
- if isinstance(k, util.string_types)
+ if isinstance(k, str)
else self.process(k, use_schema=False)
)
value_text = self.process(
@@ -2653,9 +2653,7 @@ class PGDDLCompiler(compiler.DDLCompiler):
includeclause = index.dialect_options["postgresql"]["include"]
if includeclause:
inclusions = [
- index.table.c[col]
- if isinstance(col, util.string_types)
- else col
+ index.table.c[col] if isinstance(col, str) else col
for col in includeclause
]
text += " INCLUDE (%s)" % ", ".join(
@@ -3326,7 +3324,7 @@ class PGDialect(default.DefaultDialect):
sql.text(query).bindparams(
sql.bindparam(
"schema",
- util.text_type(schema.lower()),
+ str(schema.lower()),
type_=sqltypes.Unicode,
)
)
@@ -3347,7 +3345,7 @@ class PGDialect(default.DefaultDialect):
).bindparams(
sql.bindparam(
"name",
- util.text_type(table_name),
+ str(table_name),
type_=sqltypes.Unicode,
)
)
@@ -3361,12 +3359,12 @@ class PGDialect(default.DefaultDialect):
).bindparams(
sql.bindparam(
"name",
- util.text_type(table_name),
+ str(table_name),
type_=sqltypes.Unicode,
),
sql.bindparam(
"schema",
- util.text_type(schema),
+ str(schema),
type_=sqltypes.Unicode,
),
)
@@ -3384,12 +3382,12 @@ class PGDialect(default.DefaultDialect):
).bindparams(
sql.bindparam(
"name",
- util.text_type(sequence_name),
+ str(sequence_name),
type_=sqltypes.Unicode,
),
sql.bindparam(
"schema",
- util.text_type(schema),
+ str(schema),
type_=sqltypes.Unicode,
),
)
@@ -3418,15 +3416,11 @@ class PGDialect(default.DefaultDialect):
"""
query = sql.text(query)
query = query.bindparams(
- sql.bindparam(
- "typname", util.text_type(type_name), type_=sqltypes.Unicode
- )
+ sql.bindparam("typname", str(type_name), type_=sqltypes.Unicode)
)
if schema is not None:
query = query.bindparams(
- sql.bindparam(
- "nspname", util.text_type(schema), type_=sqltypes.Unicode
- )
+ sql.bindparam("nspname", str(schema), type_=sqltypes.Unicode)
)
cursor = connection.execute(query)
return bool(cursor.scalar())
@@ -3471,9 +3465,9 @@ class PGDialect(default.DefaultDialect):
)
# Since we're binding to unicode, table_name and schema_name must be
# unicode.
- table_name = util.text_type(table_name)
+ table_name = str(table_name)
if schema is not None:
- schema = util.text_type(schema)
+ schema = str(schema)
s = sql.text(query).bindparams(table_name=sqltypes.Unicode)
s = s.columns(oid=sqltypes.Integer)
if schema:
@@ -3573,7 +3567,7 @@ class PGDialect(default.DefaultDialect):
).bindparams(
sql.bindparam(
"schema",
- util.text_type(schema),
+ str(schema),
type_=sqltypes.Unicode,
),
)
diff --git a/lib/sqlalchemy/dialects/postgresql/dml.py b/lib/sqlalchemy/dialects/postgresql/dml.py
index bb6345cf4..c561b73a1 100644
--- a/lib/sqlalchemy/dialects/postgresql/dml.py
+++ b/lib/sqlalchemy/dialects/postgresql/dml.py
@@ -185,7 +185,7 @@ class OnConflictClause(ClauseElement):
def __init__(self, constraint=None, index_elements=None, index_where=None):
if constraint is not None:
- if not isinstance(constraint, util.string_types) and isinstance(
+ if not isinstance(constraint, str) and isinstance(
constraint,
(schema.Index, schema.Constraint, ext.ExcludeConstraint),
):
@@ -197,7 +197,7 @@ class OnConflictClause(ClauseElement):
"'constraint' and 'index_elements' are mutually exclusive"
)
- if isinstance(constraint, util.string_types):
+ if isinstance(constraint, str):
self.constraint_target = constraint
self.inferred_target_elements = None
self.inferred_target_whereclause = None
diff --git a/lib/sqlalchemy/dialects/postgresql/ext.py b/lib/sqlalchemy/dialects/postgresql/ext.py
index f9e4c1d6c..f779a8010 100644
--- a/lib/sqlalchemy/dialects/postgresql/ext.py
+++ b/lib/sqlalchemy/dialects/postgresql/ext.py
@@ -4,9 +4,9 @@
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
+from itertools import zip_longest
from .array import ARRAY
-from ... import util
from ...sql import coercions
from ...sql import elements
from ...sql import expression
@@ -237,7 +237,7 @@ class ExcludeConstraint(ColumnCollectionConstraint):
name,
operator,
)
- for (expr, name, operator), colexpr in util.zip_longest(
+ for (expr, name, operator), colexpr in zip_longest(
self._render_exprs, self.columns
)
]
diff --git a/lib/sqlalchemy/dialects/postgresql/hstore.py b/lib/sqlalchemy/dialects/postgresql/hstore.py
index 85d678ef5..2ade4b7c1 100644
--- a/lib/sqlalchemy/dialects/postgresql/hstore.py
+++ b/lib/sqlalchemy/dialects/postgresql/hstore.py
@@ -9,7 +9,6 @@ import re
from .array import ARRAY
from ... import types as sqltypes
-from ... import util
from ...sql import functions as sqlfunc
from ...sql import operators
@@ -413,7 +412,7 @@ def _serialize_hstore(val):
def esc(s, position):
if position == "value" and s is None:
return "NULL"
- elif isinstance(s, util.string_types):
+ elif isinstance(s, str):
return '"%s"' % s.replace("\\", "\\\\").replace('"', r"\"")
else:
raise ValueError(
diff --git a/lib/sqlalchemy/dialects/postgresql/json.py b/lib/sqlalchemy/dialects/postgresql/json.py
index ef046e3ae..fb7621365 100644
--- a/lib/sqlalchemy/dialects/postgresql/json.py
+++ b/lib/sqlalchemy/dialects/postgresql/json.py
@@ -4,10 +4,9 @@
#
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
-from __future__ import absolute_import
+import collections.abc as collections_abc
from ... import types as sqltypes
-from ... import util
from ...sql import operators
@@ -71,8 +70,8 @@ class JSONPathType(sqltypes.JSON.JSONPathType):
super_proc = self.string_bind_processor(dialect)
def process(value):
- assert isinstance(value, util.collections_abc.Sequence)
- tokens = [util.text_type(elem) for elem in value]
+ assert isinstance(value, collections_abc.Sequence)
+ tokens = [str(elem) for elem in value]
value = "{%s}" % (", ".join(tokens))
if super_proc:
value = super_proc(value)
@@ -84,8 +83,8 @@ class JSONPathType(sqltypes.JSON.JSONPathType):
super_proc = self.string_literal_processor(dialect)
def process(value):
- assert isinstance(value, util.collections_abc.Sequence)
- tokens = [util.text_type(elem) for elem in value]
+ assert isinstance(value, collections_abc.Sequence)
+ tokens = [str(elem) for elem in value]
value = "{%s}" % (", ".join(tokens))
if super_proc:
value = super_proc(value)
diff --git a/lib/sqlalchemy/dialects/postgresql/pg8000.py b/lib/sqlalchemy/dialects/postgresql/pg8000.py
index 324007e7e..ac29b28e9 100644
--- a/lib/sqlalchemy/dialects/postgresql/pg8000.py
+++ b/lib/sqlalchemy/dialects/postgresql/pg8000.py
@@ -554,7 +554,7 @@ class PGDialect_pg8000(PGDialect):
fns = []
def on_connect(conn):
- conn.py_types[quoted_name] = conn.py_types[util.text_type]
+ conn.py_types[quoted_name] = conn.py_types[str]
fns.append(on_connect)
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
index f62830a0d..11a5f31a3 100644
--- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py
+++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
@@ -441,8 +441,7 @@ place within SQLAlchemy's own marshalling logic, and not that of ``psycopg2``
which may be more performant.
""" # noqa
-from __future__ import absolute_import
-
+import collections.abc as collections_abc
import decimal
import logging
import re
@@ -466,7 +465,6 @@ from ... import processors
from ... import types as sqltypes
from ... import util
from ...engine import cursor as _cursor
-from ...util import collections_abc
logger = logging.getLogger("sqlalchemy.dialects.postgresql")
diff --git a/lib/sqlalchemy/dialects/sqlite/__init__.py b/lib/sqlalchemy/dialects/sqlite/__init__.py
index 6e3ad0e66..e2f59907e 100644
--- a/lib/sqlalchemy/dialects/sqlite/__init__.py
+++ b/lib/sqlalchemy/dialects/sqlite/__init__.py
@@ -5,6 +5,7 @@
# This module is part of SQLAlchemy and is released under
# the MIT License: https://www.opensource.org/licenses/mit-license.php
+from . import aiosqlite # noqa
from . import base # noqa
from . import pysqlcipher # noqa
from . import pysqlite # noqa
@@ -26,10 +27,6 @@ from .base import TIMESTAMP
from .base import VARCHAR
from .dml import Insert
from .dml import insert
-from ...util import compat
-
-if compat.py3k:
- from . import aiosqlite # noqa
# default dialect
base.dialect = dialect = pysqlite.dialect
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py
index 7ded73973..3dea23e18 100644
--- a/lib/sqlalchemy/dialects/sqlite/base.py
+++ b/lib/sqlalchemy/dialects/sqlite/base.py
@@ -1324,7 +1324,7 @@ class SQLiteCompiler(compiler.SQLCompiler):
target_text = "(%s)" % ", ".join(
(
self.preparer.quote(c)
- if isinstance(c, util.string_types)
+ if isinstance(c, str)
else self.process(c, include_table=False, use_schema=False)
)
for c in clause.inferred_target_elements
@@ -1401,7 +1401,7 @@ class SQLiteCompiler(compiler.SQLCompiler):
for k, v in set_parameters.items():
key_text = (
self.preparer.quote(k)
- if isinstance(k, util.string_types)
+ if isinstance(k, str)
else self.process(k, use_schema=False)
)
value_text = self.process(
@@ -2110,7 +2110,7 @@ class SQLiteDialect(default.DefaultDialect):
coltype = self._resolve_type_affinity(type_)
if default is not None:
- default = util.text_type(default)
+ default = str(default)
colspec = {
"name": name,
diff --git a/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py b/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py
index 3765191c1..d3c504fd4 100644
--- a/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py
+++ b/lib/sqlalchemy/dialects/sqlite/pysqlcipher.py
@@ -94,11 +94,8 @@ time, at the expense of slower startup time for new connections.
""" # noqa
-from __future__ import absolute_import
-
from .pysqlite import SQLiteDialect_pysqlite
from ... import pool
-from ... import util
class SQLiteDialect_pysqlcipher(SQLiteDialect_pysqlite):
@@ -109,18 +106,14 @@ class SQLiteDialect_pysqlcipher(SQLiteDialect_pysqlite):
@classmethod
def dbapi(cls):
- if util.py3k:
- try:
- import sqlcipher3 as sqlcipher
- except ImportError:
- pass
- else:
- return sqlcipher
-
- from pysqlcipher3 import dbapi2 as sqlcipher
-
+ try:
+ import sqlcipher3 as sqlcipher
+ except ImportError:
+ pass
else:
- from pysqlcipher import dbapi2 as sqlcipher
+ return sqlcipher
+
+ from pysqlcipher3 import dbapi2 as sqlcipher
return sqlcipher