I'm trying to add a unique constraint in a parent class in Flask-SQLAlchemy in the next way. As you see, the inheritance is represeted in the Joined Table way.
class Parametric(object, Model):
__tablename__ = "parametric"
__mapper_args__ = {'polymorphic_on': type,
'polymorphic_identity': 'Parametric'}
__table_args__ = (
db.UniqueConstraint('name', 'type', name='name_type'),
)
id = Column(db.Integer, primary_key=True)
name = Column(db.String(32), nullable=False)
type = Column(db.String(50))
def __init__(self, name):
self.name = name
class Bar(Parametric):
__tablename__ = "bar"
__mapper_args__ = {'polymorphic_identity': 'Foo'}
prop = Column(db.String(32), nullable=False)
id = db.Column(db.Integer, db.ForeignKey('parametric.id'), primary_key=True)
def __init__(self, name, prop):
super(Parametric, self).__init__(name=name)
self.prop = prop
When the first child is read by the interpreter, i get the next traceback:
File "/usr/local/lib/python2.7/dist-packages/Flask_SQLAlchemy-1.0-py2.7.egg/flask_sqlalchemy/__init__.py", line 510, in __init__
DeclarativeMeta.__init__(self, name, bases, d)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/ext/declarative/api.py", line 53, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/ext/declarative/base.py", line 251, in _as_declarative
**table_kw)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 352, in __new__
table._init(name, metadata, *args, **kw)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 429, in _init
self._init_items(*args)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 72, in _init_items
item._set_parent_with_dispatch(self)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/base.py", line 421, in _set_parent_with_dispatch
self._set_parent(parent)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 2272, in _set_parent
ColumnCollectionMixin._set_parent(self, table)
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/sql/schema.py", line 2240, in _set_parent
col = table.c[col]
File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-0.9.4-py2.7-linux-x86_64.egg/sqlalchemy/util/_collections.py", line 156, in __getitem__
return self._data[key]
KeyError: 'name'
Any solution? is there something wrong in my code?