On Fri, Aug 19, 2011 at 9:23 AM, Mark Erbaugh <m...@microenh.com> wrote:

>
> On Aug 19, 2011, at 10:41 AM, Michael Bayer wrote:
>
> > Id use a mixin so that a superclass can be generated in a data driven
> manner:
> >
> >
> > MyCols = type("MyCols", (object, ), dict(("field%d" % i, Column(Integer))
> for i in xrange(1, 10)))
>

If you are going to do this a lot, it can be a pain with declarative. I
developed a framework that I used, based on ORM, which uses an explicit
_makeTable() and _mapTable() objects that I call in order to create and map
the tables. Since these are python methods, I can use any kind of python
iteration or code I want to decide what columns to create. It is a pretty
flexible model. Example conceptual code:

class Database(object):

  table_args = { 'mysql_engine' : 'InnoDB' }
  schema = "database_name"

  def __init__(self,dbclasses=[]):
    self.metadata = MetaData()
    self.engine = ... (set up engine, etc.)
    self.dbclasses = dbclasses
    for c in self.dbclasses:
      c._makeTable(self,self.engine)
      cls.__table__.create(bind=self.engine,checkfirst=True)
    for c in self.dbclasses:
      c._mapTable(self)

class FooRecord(object):

  @classmethod
  def _makeTable(cls,db,engine):
    cls.db = db
    cls.__table__ = Table('foo', db.metadata,
      Column('x'),
      Column('y'),
      **cls.table_args,
      schema=cls.schema
      etc.)

  @classmethod
  def _mapTable(cls,db):
    mapper(cls, cls.__table__, properties={ ... })

db = Database([FooRecord])

You may find a model like this easier to use to create dynamically-generated
tables. The point here is that SQLAlchemy is sufficiently flexible so that
if declarative doesn't meet your needs or is a bit cumbersome for what you
want to do, you can just start at the ORM (below declarative) level and
build up a framework that works for you.

Regards,

Daniel

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to