如何确定sqlalchemy中哪些列是外键?

时间:2018-03-07 08:46:36

标签: python sqlalchemy

我想用一个方法编写一个自定义基类(使用声明),它返回所有不是主键或外键的列名。这将用于过滤pandas.DataFrame。它现在看起来像这样:

Base = declarative_base()

class CustomBase(Base):
  __abstract__ = True

  @classmethod
  def get_filter(cls):
    return [column.name for column in cls.__table__.columns]

现在假设我有一个新类(假设我有其他与之有关系的类):

class Model(CustomBase):
  id = Column(Integer, primary_key=True)
  date = Column(Date)
  data_1 = Column(Integer)
  data_2 = Column(Integer)
  account = Column(Integer, ForeignKey('account.id'))

我拥有的是:

>>> Model.get_filter()
['id','date','data_1','data_2','account']

但我想要这个:

>>> Model.get_filter()
['date','data_1','data_2']

我检查了Mapper文档,我可以使用inspect(Model)获得,并且有一个主键集合,但我没有找到类似的外键。你能提出一些建议吗?

修改 解决方案是

@classmethod
def get_filter(cls):
  return [column.name for column in cls.__table__.columns if not column.primary_key and not column.foreign_key]

请注意column.foreign_key是一个集合,如果该列不是外键,则为空。

0 个答案:

没有答案