Doug- thanks a ton.  I think that should be enough to get me going.

I've been prototyping everything in mongodb w/pylons, and then writing
raw sql for postgres, and just about done with that step in my
project. excited to tackle this later tonight!


On Dec 20, 3:16 pm, Doug Latornell <[email protected]> wrote:
> On Sunday, December 18, 2011 2:07:40 PM UTC-8, Jonathan Vanasco wrote:
>
> > ...
>
> > 2. Have my models reflect the database.  With some custom routines, I
> > largely just had to pass in a string for the tablename and a sometimes
> > primary key .
>
> > I'm not sure how to do that under Pyramid ( I am using the Akhet
> > scaffold ).
>
> I'm using database reflection quite happily in a project. I started from a
> pyramid_routesalchemy scaffold, so I'm not sure how applicable the
> following is to an Akhet project, but I suspect there is some common ground.
>
> In my models.py module I created a ReflectedTable class to handle the
> reflection and mapper setup, a bunch of class stubs that inherit from it,
> and a map_tables function that gets called in initialize_sql() to make
> everything happen:
>
> from sqlalchemy import Table
> from sqlalchemy import MetaData
> from sqlalchemy.orm import mapper
> from sqlalchemy.orm import scoped_session
> from sqlalchemy.orm import sessionmaker
> from zope.sqlalchemy import ZopeTransactionExtension
>
> DBSession =
> scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
> metadata = MetaData()
>
> class ReflectedTable(object):
>     """Base class for database objects that are mapped to tables by
>     reflection.
>     """
>     @classmethod
>     def map_by_reflection(cls, table_name):
>         """Map the specified database table to the object by
>         reflection.
>         """
>         table = Table(table_name, metadata, autoload=True)
>         mapper(cls, table)
>
> class SomeTable(ReflectedTable): pass
>
> class SomeOtherTable(ReflectedTable): pass
>
> def map_tables():
>     objs_and_tables = [
>         (SomeTable, 'some_table_name'),
>         (SomeOtherTable, 'some_other_table_name'),
>     ]
>     for obj, table_name in objs_and_tables:
>         obj.map_by_reflection(table_name)
>
> def initialize_sql(engine):
>     DBSession.configure(bind=engine)
>     metadata.bind = engine
>     map_tables()
>
> initialize_sql gets called in __init__.main() so the reflection is all done
> during app startup. I suspect that's where you would want to do your
> multiple engine setup too, but I've never tried that.
>
> Hope that helps...

-- 
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" 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/pylons-discuss?hl=en.

Reply via email to