I've found that if __table_args__ is present on a child class in a single-table inheritance setup <http://docs.sqlalchemy.org/en/latest/orm/inheritance.html#single-table-inheritance>, SQLAlchemy throws sqlalchemy.exc.ArgumentError: Can't place __table_args__ on an inherited class with no table. At the same time it is possible to define a column with index=True on a child class, which alters the parent table the same way as __table_args__.
Here is my setup: import sqlalchemy as sa import sqlalchemy.ext.declarative from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class A(Base): __tablename__ = 'a' id = sa.Column(sa.Integer, primary_key=True) type = sa.Column(sa.Text, nullable=False) __mapper_args__ = { 'polymorphic_on': type, } class B(A): b = sa.Column(sa.Integer, index=True) __mapper_args__ = { 'polymorphic_identity': 'b', } class C(A): c = sa.Column(sa.Integer) __mapper_args__ = { 'polymorphic_identity': 'c', } __table_args__ = ( sa.Index('ix_test', c), ) engine = sa.engine.create_engine("sqlite://", echo=True) Base.metadata.create_all(engine) session = sa.orm.Session(engine) session.add_all([ B() ]) session.commit() print(session.query(A)) And it throws: Traceback (most recent call last): File "test.py", line 29, in <module> class C(A): File "/home/andrei/projects/my_project/.tox/dev/lib/python3.5/site-packages/sqlalchemy/ext/decla rative/api.py", line 64, in __init__ _as_declarative(cls, classname, cls.__dict__) File "/home/andrei/projects/my_project/.tox/dev/lib/python3.5/site-packages/sqlalchemy/ext/decla rative/base.py", line 88, in _as_declarative _MapperConfig.setup_mapping(cls, classname, dict_) File "/home/andrei/projects/my_project/.tox/dev/lib/python3.5/site-packages/sqlalchemy/ext/decla rative/base.py", line 103, in setup_mapping cfg_cls(cls_, classname, dict_) File "/home/andrei/projects/my_project/.tox/dev/lib/python3.5/site-packages/sqlalchemy/ext/decla rative/base.py", line 133, in __init__ self._setup_inheritance() File "/home/andrei/projects/my_project/.tox/dev/lib/python3.5/site-packages/sqlalchemy/ext/decla rative/base.py", line 442, in _setup_inheritance "Can't place __table_args__ on an inherited class " sqlalchemy.exc.ArgumentError: Can't place __table_args__ on an inherited class with no table. Do somebody know any workarounds? -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- 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 https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.