Здесь есть два простых варианта.
Простейший, просто обратитесь к атрибуту на классе!
Base = declarative_base()
class MyTable(Base):
__tablename__ = 'mt'
id = Column('someone_put_a_strange_for_id', Integer, primary_key=True)
bar = Column(Integer)
fk = ForeignKeyConstraint(['bar'], [MyTable.id])
Это на самом деле не Column
объекта, однако практически во всех ситуациях, SQLAlchemy будет смотреть на этом объекте для специального атрибута под названием __clause_element__()
, который будет вытаскивать фактическую Column
. В современных версиях SQLAlchemy это должно работать практически повсеместно, публикуйте отчет об ошибках, если там что-то не работает.
Другой поставить .KEY на колонке:
class MyTable(Base):
id = Column('someone_put_a_strange_for_id', Integer, key='id')
Выше, что колонка теперь table.c.id во всех случаях в-Python, «имя» только на SQL боковая сторона. Поэтому, если вы имеете дело с table.c напрямую, вы идете.
Есть еще варианты! Картографа, который находится на вашем классе также имеет свой собственный .c
атрибут, вы можете получить на этом пути также:
from sqlalchemy import inspect
Base = declarative_base()
class MyTable(Base):
__tablename__ = 'mt'
id = Column('someone_put_a_strange_for_id', Integer, primary_key=True)
inspect(MyTable).c.id
Почему бы просто не использовать ссылку на модель (не колонка): 'ForeignKey (MyTable.id)' ? – van
Я пробовал, он не работает. Поскольку имя атрибута отличается от имени поля таблицы. – davidshen84
Странно, это первый простой вариант, о котором Майк упомянул в ответе, и он всегда работал на меня. Надежда другие варианты, перечисленные в ответе Майка, помогут вам. – van