如何从SqlAlchemy中的声明表中获取列引用?

时间:2015-01-09 03:04:57

标签: python sqlalchemy

我使用声明样式用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属性?

1 个答案:

答案 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