diff options
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/databases/firebird.py | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/information_schema.py | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/informix.py | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/mssql.py | 8 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/oracle.py | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 3 | ||||
-rw-r--r-- | lib/sqlalchemy/databases/sqlite.py | 4 | ||||
-rw-r--r-- | lib/sqlalchemy/engine/base.py | 12 |
8 files changed, 45 insertions, 0 deletions
diff --git a/lib/sqlalchemy/databases/firebird.py b/lib/sqlalchemy/databases/firebird.py index 07f07644f..065894437 100644 --- a/lib/sqlalchemy/databases/firebird.py +++ b/lib/sqlalchemy/databases/firebird.py @@ -152,6 +152,10 @@ class FBDialect(ansisql.ANSIDialect): def max_identifier_length(self): return 31 + + def table_names(self, connection, schema): + s = "SELECT R.RDB$RELATION_NAME FROM RDB$RELATIONS R" + return [row[0] for row in connection.execute(s)] def has_table(self, connection, table_name, schema=None): tblqry = """ diff --git a/lib/sqlalchemy/databases/information_schema.py b/lib/sqlalchemy/databases/information_schema.py index 93f47de15..48f33cb96 100644 --- a/lib/sqlalchemy/databases/information_schema.py +++ b/lib/sqlalchemy/databases/information_schema.py @@ -98,6 +98,11 @@ class ISchema(object): return self.cache[name] +def table_names(connection, schema): + s = select([tables.c.table_name], tables.c.table_schema==schema) + return [row[0] for row in connection.execute(s)] + + def reflecttable(connection, table, include_columns, ischema_names): key_constraints = pg_key_constraints diff --git a/lib/sqlalchemy/databases/informix.py b/lib/sqlalchemy/databases/informix.py index f3a6cf60e..b4471df58 100644 --- a/lib/sqlalchemy/databases/informix.py +++ b/lib/sqlalchemy/databases/informix.py @@ -249,6 +249,10 @@ class InfoDialect(ansisql.ANSIDialect): def schemadropper(self, *args, **params): return InfoSchemaDroper( self , *args , **params) + def table_names(self, connection, schema): + s = "select tabname from systables" + return [row[0] for row in connection.execute(s)] + def has_table(self, connection, table_name,schema=None): cursor = connection.execute("""select tabname from systables where tabname=?""", table_name.lower() ) return bool( cursor.fetchone() is not None ) diff --git a/lib/sqlalchemy/databases/mssql.py b/lib/sqlalchemy/databases/mssql.py index 206291404..52963794c 100644 --- a/lib/sqlalchemy/databases/mssql.py +++ b/lib/sqlalchemy/databases/mssql.py @@ -462,6 +462,10 @@ class MSSQLDialect(ansisql.ANSIDialect): except Exception, e: raise exceptions.SQLError(statement, parameters, e) + def table_names(self, connection, schema): + from sqlalchemy.databases import information_schema as ischema + return ischema.table_names(connection, schema) + def raw_connection(self, connection): """Pull the raw pymmsql connection out--sensative to "pool.ConnectionFairy" and pymssql.pymssqlCnx Classes""" try: @@ -495,6 +499,10 @@ class MSSQLDialect(ansisql.ANSIDialect): row = c.fetchone() return row is not None + def table_names(self, connection): + sql = "SELECT tablename FROM pg_tables WHERE schemaname = 'public'" + return [row[0] for row in connection.execute(s)] + def reflecttable(self, connection, table, include_columns): import sqlalchemy.databases.information_schema as ischema diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index eb7c559a8..e5411481f 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -364,6 +364,11 @@ class OracleDialect(ansisql.ANSIDialect): dblink = '' return name, owner, dblink raise + + def table_names(self, connection, schema): + # sorry, I have no idea what that dblink stuff is about :) + s = "select table_name from all_tables" + return [row[0] for row in connection.execute(s)] def reflecttable(self, connection, table, include_columns): preparer = self.identifier_preparer diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index b192c4778..697ca8d15 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -334,6 +334,9 @@ class PGDialect(ansisql.ANSIDialect): return "losed the connection unexpectedly" in str(e) else: return False + + def table_names(self, connection, schema): + return ischema.table_names(connection, schema) def reflecttable(self, connection, table, include_columns): if self.use_information_schema: diff --git a/lib/sqlalchemy/databases/sqlite.py b/lib/sqlalchemy/databases/sqlite.py index 725ea23e2..9492de8da 100644 --- a/lib/sqlalchemy/databases/sqlite.py +++ b/lib/sqlalchemy/databases/sqlite.py @@ -224,6 +224,10 @@ class SQLiteDialect(ansisql.ANSIDialect): def oid_column_name(self, column): return "oid" + + def table_names(self, connection, schema): + s = "SELECT name FROM sqlite_master WHERE type='table'" + return [row[0] for row in connection.execute(s)] def has_table(self, connection, table_name, schema=None): cursor = connection.execute("PRAGMA table_info(%s)" % diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 2d82e3342..deeb7ec4e 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -1026,6 +1026,18 @@ class Engine(Connectable): """ return Connection(self, close_with_result=close_with_result, **kwargs) + + def table_names(self, schema=None): + conn = self.contextual_connect() + if not schema: + try: + schema = self.dialect.get_default_schema_name(conn) + except NotImplementedError: + pass + try: + return self.dialect.table_names(conn, schema) + finally: + conn.close() def reflecttable(self, table, connection=None, include_columns=None): """Given a Table object, reflects its columns and properties from the database.""" |