我使用声明样式用SQLAlchemy定义我的表。
Base = declarative_base()
class MyTable(Base):
id = Column('someone_put_a_strange_for_id', Integer)
现在,当我在课程中定义 ForeignKey 时,我需要使用
MyTable.__table__.c.someone_put_a_strange_for_id
引用此 id 列属性。有什么方法可以使用
MyTable.id.some_magic
获取此Column属性?
答案 0 :(得分:1)
这里有两个简单的选择。
最简单的是,只需引用类的属性!
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')
上面,该列现在是所有in-Python案例中的table.c.id," name"只在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