我想用一个方法编写一个自定义基类(使用声明),它返回所有不是主键或外键的列名。这将用于过滤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
是一个集合,如果该列不是外键,则为空。