To my knowledge, there doesn't exist a tool to extract schema
information from a database with a database independent API. SA does
this to some extent by providing "table_names" and "reflectable" methods
on it's Engine class, but I think it would be nice to have something
more comprehensive and fine grained.
It seems to me that ORM is only a part of SA's function. I've used SA's
connection, cursor (ResultProxy) and SQL abstractions without ORM as a
kind of higher level DBAPI with good results. I think that a schema
information API would fit well into SA's theme. The implementation
could make use of the non-ORM features as well as providing for some
other features like table reflection.
How would it fit in? I think it should be usable without requiring the
use of other SA facilities. Maybe like this:
*****************************************************************
import sqlalchemy as sa
from sqlalchemy.database import dbinfo
engine = sa.create_engine('postgres:///')
# or a dbapi connection
# return list of schema names
schema_names = dbinfo.getSchemaNames(engine)
# return list of table names
table_names = dbinfo.getTableNames(engine, schema_name='public')
# return list of view names
view_names = dbinfo.getViewNames(engine, schema_name='public')
# return the SQL statement required to get view names (no connectable)
view_names = dbinfo.getViewNames(schema_name='public')
# Also like this.
info = dblib.PostgresInfoFetcher(engine)
print info.getSchemaNames()
print info.getConstraintInfo(table_name='t1', schema_name='s1')
# Returns the SQL.
print info.getConstraintInfo(table_name='t1', schema_name='s1',
return_statement=True)
*****************************************************************
Note that a method can return records or an SQL statement. I have a
basic implementation of this based on information_schema that works with
Postgresql and MSSQL (and maybe Oracle).
I'd like to get some opinions on this before going any further. Is it
needed? If so, how should it be implemented? Would it be good as a
part of SA or should it be separate?
--Randall
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---