Hi,
I have this declarative table model:
http://paste.pound-python.org/show/9857/
==========================================================
from sqlalchemy import Column, String, ForeignKeyConstraint, Integer
from sqlalchemy.ext.declarative import declarative_base, declared_attr


class TableName(object):
    @declared_attr
    def __tablename__(cls):
        return cls.__name__


Base=declarative_base(cls=TableName)


class TMixin(object):

    @declared_attr
    def user(cls):
        return Column(String, primary_key=True)

    @declared_attr
    def timestamp(cls):
        return Column(Integer, autoincrement=False, primary_key=True)


class Timeline(TMixin, Base):

    snaptype = Column(Integer, primary_key=True, autoincrement=False)

    __mapper_args__ = {'polymorphic_on': snaptype}


class CMixin(TMixin):

    @declared_attr
    def __table_args__(cls):
        return (ForeignKeyConstraint(
                    ['user', 'timestamp'],
                    ['Timeline.user', 'Timeline.timestamp']),)

    @declared_attr
    def __mapper_args__(cls):
        return {'polymorphic_identity': CMixin.__subclasses__().index(cls)}


class C(CMixin, Timeline):

    pass

==========================================================

But on running this code, I get:
==========================================================
Traceback (most recent call last):
  File "schema.py", line 45, in <module>
    class C(CMixin, Timeline):
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative.py", 
line 1129, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative.py", 
line 1027, in _as_declarative
    **table_kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 
265, in __new__
    table._init(name, metadata, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 
340, in _init
    self._init_items(*args)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 64, 
in _init_items
    item._set_parent_with_dispatch(self)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/events.py", line 
227, in _set_parent_with_dispatch
    self._set_parent(parent) 
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/schema.py", line 
2010, in _set_parent
    col = table.c[col]
  File "/usr/local/lib/python2.7/dist-
packages/sqlalchemy/util/_collections.py", line 88, in __getitem__
    return self._data[key]
KeyError: 'user'
==========================================================

I don't get any error if C isn't inheriting from Timeline (ie, no joint-table 
inheritance). What could be wrong here?

sqlalchemy.__version__ = '0.7.1'

And thanks in advance.

-- 
Fayaz Yusuf Khan
Cloud developer and designer
Dexetra SS, Kochi, India
fayaz.yusuf.khan_AT_gmail_DOT_com
fayaz_AT_dexetra_DOT_com
+91-9746-830-823
from sqlalchemy import Column, String, ForeignKeyConstraint, Integer
from sqlalchemy.ext.declarative import declarative_base, declared_attr


class TableName(object):
    @declared_attr
    def __tablename__(cls):
        return cls.__name__


Base=declarative_base(cls=TableName)


class TMixin(object):

    @declared_attr
    def user(cls):
        return Column(String, primary_key=True)

    @declared_attr
    def timestamp(cls):
        return Column(Integer, autoincrement=False, primary_key=True)


class Timeline(TMixin, Base):

    snaptype = Column(Integer, primary_key=True, autoincrement=False)



class CMixin(TMixin):

    @declared_attr
    def __table_args__(cls):
        return (ForeignKeyConstraint(
                    ['user', 'timestamp'],
                    ['Timeline.user', 'Timeline.timestamp']),)


class C(CMixin, Base):

    pass

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to