From 468fae8a1f4c66a60708ebd6420a2d40f1d7c226 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Sun, 10 Sep 2017 16:44:35 +0800 Subject: [PATCH] Implement connect() for SQLite3 driver --- sqlian/databases.py | 13 ++++++++++++- sqlian/sqlite/databases.py | 4 ++++ tests/database/test_sqlite3.py | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/sqlian/databases.py b/sqlian/databases.py index d3d5136..63d5c70 100644 --- a/sqlian/databases.py +++ b/sqlian/databases.py @@ -47,7 +47,18 @@ def register(scheme, klass, replaces_existing=False): six.moves.urllib.parse.uses_netloc.append(scheme) -register('sqlite', 'sqlian.sqlite.databases.Database') +# TODO: These don't actually work yet. + +# register('mysql', 'sqlian.mysql.MySQLDBDatabase') +# register('mysqldb+mysql', 'sqlian.mysql.MySQLDBDatabase') +# register('pymysql+mysql', 'sqlian.mysql.PyMySQLDatabase') + +# register('postgresql', 'sqlian.postgresql.Psycopg2Database') +# register('psycopg2+postgresql', 'sqlian.postgresql.Psycopg2Database') +# register('py-postgresql+postgresql','sqlian.postgresql.PyPostgreSQLDatabase') + +register('sqlite', 'sqlian.sqlite.SQLite3Database') +register('sqlite3+sqlite', 'sqlian.sqlite.SQLite3Database') IN_MEMORY_DB_PATTERN = re.compile(r'^(?P\w+)://:memory:$') diff --git a/sqlian/sqlite/databases.py b/sqlian/sqlite/databases.py index 8a6270f..72bf96a 100644 --- a/sqlian/sqlite/databases.py +++ b/sqlian/sqlite/databases.py @@ -4,5 +4,9 @@ class SQLite3Database(Database): + dbapi2_module_name = 'sqlite3' engine_class = Engine + + def connect(self, dbapi, database, **kwargs): + return dbapi.connect(database) diff --git a/tests/database/test_sqlite3.py b/tests/database/test_sqlite3.py index 99541cb..0f12ac0 100644 --- a/tests/database/test_sqlite3.py +++ b/tests/database/test_sqlite3.py @@ -1,6 +1,6 @@ import pytest -from sqlian import star +from sqlian import connect, star from sqlian.sqlite import SQLite3Database @@ -47,3 +47,18 @@ def test_insert(db): assert not rows names = [r.name for r in db.select('name', from_='person')] assert names == ['Mosky', 'Keith'] + + +@pytest.mark.parametrize('scheme', ['sqlite', 'sqlite3+sqlite']) +def test_connect(tmpdir, scheme): + dbpath = tmpdir.join('sqlian-connect-test.sqlite3') + db = connect('{scheme}:///{path}'.format(scheme=scheme, path=dbpath)) + assert db.is_open() + + cursor = db.cursor() + cursor.execute('''CREATE TABLE "person" ("name" TEXT)''') + cursor.execute('''INSERT INTO "person" VALUES ('Mosky')''') + cursor.close() + + record, = db.select(star, from_='person') + assert record.name == 'Mosky'