From 8c09969d44c7d66634c3a392f17383ebfacb2881 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 4 Jun 2011 19:53:24 -0400 Subject: [PATCH] - Accept None from SQLite cursor.fetchone() when "PRAGMA read_uncommitted" is called to determine current isolation mode at connect time and default to SERIALIZABLE; this to support SQLite versions pre-3.3.0 that did not have this feature. [ticket:2173] --- CHANGES | 8 ++++++++ lib/sqlalchemy/dialects/sqlite/base.py | 12 +++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 3a2dedc4f5..72c8c86a12 100644 --- a/CHANGES +++ b/CHANGES @@ -37,6 +37,14 @@ CHANGES and are redundant: reflecttable(), create(), drop(), text(), engine.func +- sqlite + - Accept None from cursor.fetchone() when + "PRAGMA read_uncommitted" is called to determine + current isolation mode at connect time and + default to SERIALIZABLE; this to support SQLite + versions pre-3.3.0 that did not have this + feature. [ticket:2173] + - mysql - Unit tests pass 100% on MySQL installed on windows. diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index 4ab509318d..331ab92d0a 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -505,7 +505,17 @@ class SQLiteDialect(default.DefaultDialect): def get_isolation_level(self, connection): cursor = connection.cursor() cursor.execute('PRAGMA read_uncommitted') - value = cursor.fetchone()[0] + res = cursor.fetchone() + if res: + value = res[0] + else: + # http://www.sqlite.org/changes.html#version_3_3_3 + # "Optional READ UNCOMMITTED isolation (instead of the + # default isolation level of SERIALIZABLE) and + # table level locking when database connections + # share a common cache."" + # pre-SQLite 3.3.0 default to 0 + value = 0 cursor.close() if value == 0: return "SERIALIZABLE" -- 2.39.5