SQL Alchemy makes it easy to get types out of the database:
from sqlalchemy import *
engine = create_engine(
"postgresql+pg8000://postgres:postgres@localhost/postgres",
isolation_level="READ UNCOMMITTED"
)
c = engine.connect()
meta = MetaData()
t = Table('table', meta, autoload=True, autoload_with=engine, schema='test')
columns = [col for col in t.columns]
And then from there, you can filter the column list down to things you want.
import sqlalchemy.sql.sqltypes
def useColumn(c):
if (type(c.type) is TIMESTAMP):
return False
if (type(c.type) is VARCHAR):
if (c.type.length == 24):
return False
if (type(c.type) is DATE):
return False
if (c.name.startswith("internal_")):
return False
if (c.name == "dont_use_me"):
return False
return True
For certain columns, SQL Alchemy will give you an object that is a database specific type (e.g. there is a Postgres namespace), but you can find the exact class name:
columns[0].type.__class__
...sqlalchemy.sql.sqltypes.INTEGER