On Nov 16, 2013, at 4:08 PM, Jon Nelson <jnel...@jamponi.net> wrote:
> I've been experiencing a weirdness. > > Using SQLAlchemy 0.8.3 and PostgreSQL with declarative (and deferred > reflection), if I don't manually force a reflection *before* I call > prepare then - when I use certain objects - I get an error which > indicates that SQLAlchemy did not reflect secondary tables. Is this a > known issue? It's really hard to find an isolated test case. that actually sounds like a real issue / missing feature since I’m not recalling prepare() is going to hit the “secondary” tables also. it should be easy to reproduce….(let’s see)….sure, simple. this includes a workaround. a new ticket with a patch is at http://www.sqlalchemy.org/trac/ticket/2865 from sqlalchemy import * from sqlalchemy.orm import * from sqlalchemy.ext.declarative import declarative_base, DeferredReflection Base = declarative_base(cls=DeferredReflection) class A(Base): __tablename__ = 'a' bs = relationship("B", secondary="atob") class B(Base): __tablename__ = 'b' e = create_engine("sqlite://", echo=True) e.execute(""" create table a(id integer primary key) """) e.execute(""" create table b(id integer primary key) """) e.execute(""" create table atob( a_id integer references a(id), b_id integer references b(id), primary key (a_id, b_id) ) """) Base.prepare(e) # if this isn't done, failure #Table('atob', Base.metadata, autoload=True, autoload_with=e) print A.bs.__clause_element__() > > > InvalidRequestError: When initializing mapper > Mapper|ObjectOne|table_one, expression 'table_one_secondary_table' > failed to locate a name ("name 'table_one_secondary_table' is not > defined"). If this is a class name, consider adding this > relationship() to the <class 'ObjectOne> class after both dependent > classes have been defined. > > > the table 'table_one_secondary_table' is like this: > > class ObjectOne(Base): > __tablename__ = 'table_one' > .... > object_twos = relationship( > ObjectTwo, backref='object_one', > cascade="save-update,merge,refresh-expire,expunge", > secondary='table_one_secondary_table', > passive_deletes=True > ) > > -- > Jon > Software Blacksmith > > -- > 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