Python 按外键计数和排序,但使用另一列
我有两张桌子Python 按外键计数和排序,但使用另一列,python,sqlalchemy,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.
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\U词汇表。gram\u term\u id?如果您需要一个快速而肮脏的解决方案,仅从结果中提取短名称和计数,您可以使用列表理解:
a=[('ADV',1,15),('N',13,137),('V',9,48)]
b=[(x,z)表示a中的(x,uz)]
b
将保存以下值:
[('ADV',15),('N',137),('V',48)]
如果列表很小,则在列表理解中再次迭代,只需获取所需字段。\uu
通常被接受为需要解包但不需要的数据的占位符。因此,b=[(x,y)对于a中的(x,uu,y)]
对于未来的维护者来说可能更清晰。我根据@ac24发布的评论编辑了我的原始回复。