From: Mike Bayer Date: Sat, 4 Jun 2011 23:53:24 +0000 (-0400) Subject: - Accept None from SQLite cursor.fetchone() when X-Git-Tag: rel_0_7_1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8c09969d44c7d66634c3a392f17383ebfacb2881;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - 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] --- 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"