as I mentioned earlier, SQLAlchemy-Migrate has done it this way for years. I'm not a fan of it which was one of several reasons I wrote Alembic, but it does work for them.
On Aug 1, 2013, at 10:21 AM, askel <dummy...@mail.ru> wrote: > No offence but it feels like direct route to the hell. Monkeypatching is > acknowledged to be really bad practise in general with few exemptions. > > On Thursday, August 1, 2013 9:47:45 AM UTC-4, Simon King wrote: > It's a horrible hack, but did you know that you can change the class > of an instance by assigning to its __class__ attribute? I've no idea > if SA does anything that would stop this from working, but you could > try it. Start by creating a subclass of Table with your extra methods, > then iterate over each table in the metadata, setting the __class__ > attribute to your subclass. > > Hope that helps, > > Simon > > On Thu, Aug 1, 2013 at 12:17 AM, Gustavo Baratto <gbar...@gmail.com> wrote: > > Thanks for the reply Michael... I had a hunch this wouldn't be easy to > > tackle, but this is more than I can chew at the moment: ) > > > > For now, I'll just keeping doing what I'm already doing which is to > > instantiate a new class taking the table as an argument, and then within my > > class reference the table's attributes most likely to be used (See below). > > If there is a more elegant way of doing this, I'm all ears ;) > > > > Thanks! > > > > > > > > Class MyGenericTable(object): > > def __init__(self, table): > > self.tablename = table > > > > @property > > def metadata(self): > > return DB.instance().metadata > > > > @property > > def table(self): > > return self.metadata.tables[self.tablename] > > > > @property > > def columns(self): > > return self.table.c > > > > > > @property > > > > def c(self): > > return self.columns > > > > @property > > def primary_key(self): > > return self.table.primary_key > > > > > > def select(self, data): > > """ my select """ > > some custom code > > > > > > def insert(self, data): > > """ my insert """ > > some custom code > > > > > > > > > > On Wed, Jul 31, 2013 at 10:57 AM, Michael Bayer <mik...@zzzcomputing.com> > > wrote: > >> > >> oh, except you might have problems with tables in there that are reflected > >> due to a foreign key. Table is not really intended for subclassing, > >> unless you want to do SQLAlchemy-Migrate's approach of monkeypatching > >> Table.__bases__ at the global level, I'd seek some other way to achieve > >> what > >> you want. > >> > >> > >> > >> On Jul 31, 2013, at 1:56 PM, Michael Bayer <mik...@zzzcomputing.com> > >> wrote: > >> > >> You'd probably implement your own reflect_all function/method: > >> > >> from sqlalchemy import inspect > >> > >> def reflect(metadata, bind): > >> inspector = inspect(bind) > >> for tname in inspector.get_table_names(): > >> MySpecialTable(tname, metadata, autoload=True, autoload_with=bind) > >> > >> > >> > >> On Jul 31, 2013, at 1:34 PM, tiadobatima <gbar...@gmail.com> wrote: > >> > >> Hello there, > >> > >> When this application starts, we reflect the DB into a MetaData() object > >> and this is made available for everyone to use. > >> I'd like to add a few more methods to the table objects within that > >> MetaData(). Is there any easy way to extend these already instantiated > >> sqlalchemy.schema.Table objects? > >> > >> Thanks! :) > >> > >> > >> -- > >> You received this message because you are subscribed to the Google Groups > >> "sqlalchemy" group. > >> To unsubscribe from this group and stop receiving emails from it, send an > >> email to sqlalchemy+...@googlegroups.com. > >> To post to this group, send email to sqlal...@googlegroups.com. > >> Visit this group at http://groups.google.com/group/sqlalchemy. > >> For more options, visit https://groups.google.com/groups/opt_out. > >> > >> > >> > >> > >> > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sqlalchemy+...@googlegroups.com. > > To post to this group, send email to sqlal...@googlegroups.com. > > Visit this group at http://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/groups/opt_out. > >
signature.asc
Description: Message signed with OpenPGP using GPGMail