From 415ee39db578a17cefc1e4ccd8526ec5612be2e0 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 5 Nov 2005 21:38:05 +0000 Subject: [PATCH] moving sqlite filename into named options --- doc/build/content/dbengine.myt | 6 +++--- lib/sqlalchemy/databases/__init__.py | 1 + lib/sqlalchemy/databases/oracle.py | 9 +++++++++ lib/sqlalchemy/databases/postgres.py | 10 ++++++++++ lib/sqlalchemy/databases/sqlite.py | 17 ++++++++++++----- lib/sqlalchemy/engine.py | 8 ++++++++ test/engines.py | 2 +- test/tables.py | 4 ++-- 8 files changed, 46 insertions(+), 11 deletions(-) diff --git a/doc/build/content/dbengine.myt b/doc/build/content/dbengine.myt index 4115084528..409dc48aea 100644 --- a/doc/build/content/dbengine.myt +++ b/doc/build/content/dbengine.myt @@ -17,10 +17,10 @@ import sqlalchemy.engine as engine # sqlite in memory - sqlite_engine = engine.create_engine('sqlite', ':memory:', {}, **opts) + sqlite_engine = engine.create_engine('sqlite', {'filename':':memory:'}, **opts) # sqlite using a file - sqlite_engine = engine.create_engine('sqlite', 'querytest.db', {}, **opts) + sqlite_engine = engine.create_engine('sqlite', {'filename':'querytest.db'}, **opts) # postgres postgres_engine = engine.create_engine('postgres', @@ -57,4 +57,4 @@
  • use_ansi=True : used only by Oracle; when False, the Oracle driver attempts to support a particular "quirk" of some Oracle databases, that the LEFT OUTER JOIN SQL syntax is not supported, and the "Oracle join" syntax of using <% "(+)=" |h%> must be used in order to achieve a LEFT OUTER JOIN. Its advised that the Oracle database be configured to have full ANSI support instead of using this feature.
  • - \ No newline at end of file + diff --git a/lib/sqlalchemy/databases/__init__.py b/lib/sqlalchemy/databases/__init__.py index 34984e088e..7f47fc4d25 100644 --- a/lib/sqlalchemy/databases/__init__.py +++ b/lib/sqlalchemy/databases/__init__.py @@ -16,3 +16,4 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +__ALL__ = ['oracle', 'postgres', 'sqlite'] \ No newline at end of file diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 696c59dda8..aa25ffec62 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -67,6 +67,15 @@ colspecs = { def engine(*args, **params): return OracleSQLEngine(*args, **params) + +def descriptor(): + return {'name':'oracle', + 'description':'Oracle', + 'arguments':[ + ('dsn', 'Data Source Name', None), + ('user', 'Username', None), + ('password', 'Password', None) + ]} class OracleSQLEngine(ansisql.ANSISQLEngine): def __init__(self, opts, use_ansi = True, module = None, **params): diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index a3a84c7428..d38db22e48 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -114,6 +114,16 @@ gen_key_constraints = schema.Table("key_column_usage", generic_engine, def engine(opts, **params): return PGSQLEngine(opts, **params) +def descriptor(): + return {'name':'postgres', + 'description':'PostGres', + 'arguments':[ + ('user',"Database Username",None), + ('password',"Database Password",None), + ('database',"Database Name",None), + ('host',"Hostname", None), + ]} + class PGSQLEngine(ansisql.ANSISQLEngine): def __init__(self, opts, module = None, **params): if module is None: diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 453618fde8..da993d9a52 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -73,12 +73,19 @@ pragma_names = { 'BLOB' : SLBinary, } -def engine(filename, opts, **params): - return SQLiteSQLEngine(filename, opts, **params) - +def engine(opts, **params): + return SQLiteSQLEngine(opts, **params) + +def descriptor(): + return {'name':'sqlite', + 'description':'SQLite', + 'arguments':[ + ('filename', "Database Filename",None) + ]} + class SQLiteSQLEngine(ansisql.ANSISQLEngine): - def __init__(self, filename, opts, **params): - self.filename = filename + def __init__(self, opts, **params): + self.filename = opts.pop('filename') self.opts = opts or {} ansisql.ANSISQLEngine.__init__(self, **params) diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index 6e96e97243..278836e35c 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -23,6 +23,7 @@ import sqlalchemy.util as util import sqlalchemy.sql as sql import StringIO, sys import sqlalchemy.types as types +import sqlalchemy.databases def create_engine(name, *args ,**kwargs): """creates a new SQLEngine instance. @@ -33,6 +34,13 @@ def create_engine(name, *args ,**kwargs): module = getattr(__import__('sqlalchemy.databases.%s' % name).databases, name) return module.engine(*args, **kwargs) +def engine_descriptors(): + result = [] + for module in sqlalchemy.databases.__ALL__: + module = getattr(__import__('sqlalchemy.databases.%s' % module).databases, module) + result.append(module.descriptor()) + return result + class SchemaIterator(schema.SchemaVisitor): """a visitor that can gather text into a buffer and execute the contents of the buffer.""" def __init__(self, sqlproxy, **params): diff --git a/test/engines.py b/test/engines.py index 0ffa97f954..5f2ae8d646 100644 --- a/test/engines.py +++ b/test/engines.py @@ -16,7 +16,7 @@ import unittest, re class EngineTest(PersistTest): def testsqlite(self): - db = sqllite.engine(':memory:', {}, echo = testbase.echo) + db = sqllite.engine({'filename':':memory'}, echo = testbase.echo) self.do_tableops(db) def testpostgres(self): diff --git a/test/tables.py b/test/tables.py index 5951957808..b1a241fa4c 100644 --- a/test/tables.py +++ b/test/tables.py @@ -15,10 +15,10 @@ DBTYPE = 'sqlite_memory' #DBTYPE = 'sqlite_file' if DBTYPE == 'sqlite_memory': - db = sqlalchemy.engine.create_engine('sqlite', ':memory:', {}, echo = testbase.echo) + db = sqlalchemy.engine.create_engine('sqlite', {'filename':':memory:'}, echo = testbase.echo) elif DBTYPE == 'sqlite_file': import sqlalchemy.databases.sqlite as sqllite - db = sqlalchemy.engine.create_engine('sqlite', 'querytest.db', {}, echo = testbase.echo) + db = sqlalchemy.engine.create_engine('sqlite', {'filename':'querytest.db'}, echo = testbase.echo) elif DBTYPE == 'postgres': db = sqlalchemy.engine.create_engine('postgres', {'database':'test', 'host':'127.0.0.1', 'user':'scott', 'password':'tiger'}, echo=testbase.echo) -- 2.47.2