I'm using the ORM and one of my tables does not have a primary key defined. I am also using DeferredReflection, and I can't seem to figure out how to defer the PrimaryKeyConstraint until Base.prepare() runs. Any pointers?
Base = declarative_base(cls=DeferredReflection) class Person(Base): __tablename__ = 'people' __table_args__ = (PrimaryKeyConstraint(u'name'), {}) # this does not run if __name__ == '__main__': engine = create_engine('mysql://user:password@localhost/organisms') Base.prepare(engine) When this runs, we get an error constructing the Person class (the __main__ section is not hit). This makes sense given that we haven't reflected the table yet! Traceback (most recent call last): File "/home/ubuntu/deferred_reflection.py", line 10, in <module> class Person(Base): File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/api.py", line 53, in __init__ _as_declarative(cls, classname, cls.__dict__) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/ext/declarative/base.py", line 251, in _as_declarative **table_kw) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 350, in __new__ table._init(name, metadata, *args, **kw) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 427, in _init self._init_items(*args) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 70, in _init_items item._set_parent_with_dispatch(self) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/base.py", line 283, in _set_parent_with_dispatch self._set_parent(parent) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 2646, in _set_parent super(PrimaryKeyConstraint, self)._set_parent(table) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 2289, in _set_parent ColumnCollectionMixin._set_parent(self, table) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 2257, in _set_parent col = table.c[col] File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/_collections.py", line 156, in __getitem__ return self._data[key] KeyError: u'name' -- 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/d/optout.