按外键计数和排序,但使用另一列

时间:2019-09-10 08:26:02

标签: python sqlalchemy

我得到了两张桌子。

class tbl_vocabulary(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    word = db.Column(db.String(32), index=True)
    gram_term_id = db.Column(db.Integer, db.ForeignKey('tbl_grammatical_term.id'))

class tbl_grammatical_term(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    short_name = db.Column(db.String(16))

这是一个简单的1:N关系,一个语法术语可以属于许多词汇条目。我想获得一个词汇表,其中列出了多少名词,动词等。

我可以通过以下查询得到它。

tbl_vocabulary.query.with_entities(tbl_grammatical_term.short_name, tbl_vocabulary.gram_term_id, func.count(tbl_grammatical_term.short_name)).outerjoin(tbl_grammatical_term).group_by(tbl_grammatical_term.short_name).all()

所以我得到了这样的嵌套列表:

[('ADV', 1, 15), ('N', 13, 137), ('V', 9, 48)]

具有以下信息:

[(tbl_grammatical_term.short_name, tbl_vocabulary.gram_term_id, count)]

那我该如何摆脱tbl_vocabulary.gram_term_id?

1 个答案:

答案 0 :(得分:0)

如果您需要快速而又肮脏的解决方案来仅提取short_name并从结果中计数,则可以使用列表理解:

a = [('ADV', 1, 15), ('N', 13, 137), ('V', 9, 48)]
b = [(x,z) for (x,_,z) in a]

b将具有以下值:

[('ADV', 15), ('N', 137), ('V', 48)]