Hello,
I'm trying to do create a class with joined inheritance.
Some have their name in their table and have to access it from another
table using a join.
I did this mixin and what though it creates an expression error because the
SQL generated is not the good one.
class NameMixin(object):
@declared_attr.cascading
def name(cls):
if cls.__tablename__ != TABLE_NAME_THROUGH_RELATION:
return Column(String)
@hybrid_property
def name(self):
return self.basis.name
@name.expression
def name(cls):
return select([OtherTable.__table__.c.name]).select_from(
cls.__table__.join(OtherTable.__table__)
)
@name.setter
def name(self, new_name):
self.other_table.name = new_name
return name
With this Mixin a Column name is created in the base which I don't want.
I got this error when doing a query on the name:
sqlalchemy.exc.ProgrammingError: (raised as a result of Query-invoked
autoflush; consider using a session.no_autoflush block if this flush is
occurring prematurely)
(psycopg2.ProgrammingError) column "name" of relation "subclass_with_name" does
not exist
How can I tell sqlalchemy that the base class should not have the column and
instead make the query using the subtable in different way.
I you guys have any idea, it's welcome (even if it's not the method I'm trying
to do).
The simpler method would be to replicate the attribute and not do a join,
though it's less elegant.
Thanks for your help,
Alexis.
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.