如何从 SqlAlchemy 中的声明性 table 获取列引用?
How to get Column reference from declarative table in 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
获取此列属性?
这里有两个简单的选项。
最简单的就是,直接参考class!
上的属性即可
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 版本中,这应该可以在任何地方工作,post 如果有某个地方它不工作,请报告错误。
另一种是在列上放一个.key:
class MyTable(Base):
id = Column('someone_put_a_strange_for_id', Integer, key='id')
上面,该列现在在所有 in-Python 情况下都是 table.c.id,"name" 仅在 SQL 一侧。因此,如果您直接处理 table.c,就可以了。
还有更多选择! class 上的映射器也有自己的 .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
我使用 声明式 样式通过 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
获取此列属性?
这里有两个简单的选项。
最简单的就是,直接参考class!
上的属性即可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 版本中,这应该可以在任何地方工作,post 如果有某个地方它不工作,请报告错误。
另一种是在列上放一个.key:
class MyTable(Base):
id = Column('someone_put_a_strange_for_id', Integer, key='id')
上面,该列现在在所有 in-Python 情况下都是 table.c.id,"name" 仅在 SQL 一侧。因此,如果您直接处理 table.c,就可以了。
还有更多选择! class 上的映射器也有自己的 .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