summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/dialects')
-rw-r--r--lib/sqlalchemy/dialects/mssql/base.py8
-rw-r--r--lib/sqlalchemy/dialects/mssql/pymssql.py5
-rw-r--r--lib/sqlalchemy/dialects/mysql/base.py31
-rw-r--r--lib/sqlalchemy/dialects/postgresql/psycopg2.py2
4 files changed, 41 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py
index 5618a67f9..f8ed7697a 100644
--- a/lib/sqlalchemy/dialects/mssql/base.py
+++ b/lib/sqlalchemy/dialects/mssql/base.py
@@ -990,7 +990,11 @@ class TIME(sqltypes.TIME):
self.__zero_date, value.time()
)
elif isinstance(value, datetime.time):
- value = datetime.datetime.combine(self.__zero_date, value)
+ """ issue #5339
+ per: https://github.com/mkleehammer/pyodbc/wiki/Tips-and-Tricks-by-Database-Platform#time-columns
+ pass TIME value as string
+ """ # noqa
+ value = str(value)
return value
return process
@@ -2361,7 +2365,7 @@ class MSDialect(default.DefaultDialect):
}
engine_config_types = default.DefaultDialect.engine_config_types.union(
- [("legacy_schema_aliasing", util.asbool)]
+ {"legacy_schema_aliasing": util.asbool}
)
ischema_names = ischema_names
diff --git a/lib/sqlalchemy/dialects/mssql/pymssql.py b/lib/sqlalchemy/dialects/mssql/pymssql.py
index 8943c5493..962d1af01 100644
--- a/lib/sqlalchemy/dialects/mssql/pymssql.py
+++ b/lib/sqlalchemy/dialects/mssql/pymssql.py
@@ -14,6 +14,11 @@
pymssql is a Python module that provides a Python DBAPI interface around
`FreeTDS <http://www.freetds.org/>`_.
+.. note::
+
+ pymssql is currently not included in SQLAlchemy's continuous integration
+ (CI) testing.
+
Modern versions of this driver worked very well with SQL Server and FreeTDS
from Linux and were highly recommended. However, pymssql is currently
unmaintained and has fallen behind the progress of the Microsoft ODBC driver in
diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py
index dca7b9a00..d009d656e 100644
--- a/lib/sqlalchemy/dialects/mysql/base.py
+++ b/lib/sqlalchemy/dialects/mysql/base.py
@@ -808,6 +808,7 @@ from ...sql import coercions
from ...sql import compiler
from ...sql import elements
from ...sql import roles
+from ...sql import util as sql_util
from ...types import BINARY
from ...types import BLOB
from ...types import BOOLEAN
@@ -1494,9 +1495,28 @@ class MySQLCompiler(compiler.SQLCompiler):
def for_update_clause(self, select, **kw):
if select._for_update_arg.read:
- return " LOCK IN SHARE MODE"
+ tmp = " LOCK IN SHARE MODE"
else:
- return " FOR UPDATE"
+ tmp = " FOR UPDATE"
+
+ if select._for_update_arg.of and self.dialect.supports_for_update_of:
+
+ tables = util.OrderedSet()
+ for c in select._for_update_arg.of:
+ tables.update(sql_util.surface_selectables_only(c))
+
+ tmp += " OF " + ", ".join(
+ self.process(table, ashint=True, use_schema=False, **kw)
+ for table in tables
+ )
+
+ if select._for_update_arg.nowait:
+ tmp += " NOWAIT"
+
+ if select._for_update_arg.skip_locked and self.dialect._is_mysql:
+ tmp += " SKIP LOCKED"
+
+ return tmp
def limit_clause(self, select, **kw):
# MySQL supports:
@@ -2211,6 +2231,9 @@ class MySQLDialect(default.DefaultDialect):
sequences_optional = True
+ supports_for_update_of = False # default for MySQL ...
+ # ... may be updated to True for MySQL 8+ in initialize()
+
supports_sane_rowcount = True
supports_sane_multi_rowcount = False
supports_multivalues_insert = True
@@ -2526,6 +2549,10 @@ class MySQLDialect(default.DefaultDialect):
self._is_mariadb and self.server_version_info >= (10, 3)
)
+ self.supports_for_update_of = (
+ self._is_mysql and self.server_version_info >= (8,)
+ )
+
self._needs_correct_for_88718_96365 = (
not self._is_mariadb and self.server_version_info >= (8,)
)
diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
index 1eaf63ff3..9585dd467 100644
--- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py
+++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py
@@ -658,7 +658,7 @@ class PGDialect_psycopg2(PGDialect):
_has_native_jsonb = False
engine_config_types = PGDialect.engine_config_types.union(
- [("use_native_unicode", util.asbool)]
+ {"use_native_unicode": util.asbool}
)
colspecs = util.update_copy(