14,
)
- _isolation_lookup = {"READ UNCOMMITTED": 1, "SERIALIZABLE": 0}
+ _isolation_lookup = util.immutabledict(
+ {"READ UNCOMMITTED": 1, "SERIALIZABLE": 0}
+ )
def set_isolation_level(self, connection, level):
try:
exc.ArgumentError(
"Invalid value '%s' for isolation_level. "
"Valid isolation levels for %s are %s"
- % (level, self.name, ", ".join(self._isolation_lookup))
+ % (
+ level,
+ self.name,
+ ", ".join(self._isolation_lookup),
+ )
),
replace_context=err,
)
def _get_server_version_info(self, connection):
return self.dbapi.sqlite_version_info
+ _isolation_lookup = SQLiteDialect._isolation_lookup.union(
+ {
+ "AUTOCOMMIT": None,
+ }
+ )
+
def set_isolation_level(self, connection, level):
if hasattr(connection, "connection"):
dbapi_connection = connection.connection
from sqlalchemy.testing import fixtures
from sqlalchemy.testing import is_
from sqlalchemy.testing import mock
+from sqlalchemy.testing.assertions import expect_raises_message
from sqlalchemy.types import Boolean
from sqlalchemy.types import Date
from sqlalchemy.types import DateTime
)
)
+ @testing.requires.insert_order_dicts
+ @testing.only_on("sqlite+pysqlite")
+ def test_isolation_level_message(self):
+ # needs to test that all three words are present and we also
+ # dont want to default all isolation level messages to use
+ # sorted(), so rely on python 3.7 for ordering of keywords
+ # in the message
+ with expect_raises_message(
+ exc.ArgumentError,
+ "Invalid value 'invalid' for "
+ "isolation_level. Valid isolation levels for "
+ "sqlite are READ UNCOMMITTED, SERIALIZABLE, AUTOCOMMIT",
+ ):
+ with testing.db.connect() as conn:
+ conn.execution_options(isolation_level="invalid")
+
@testing.only_on("sqlite+pysqlcipher")
def test_pysqlcipher_connects(self):
"""test #6586"""