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.
