您需要在创建成员计数的子查询中创建一个子查询,然后使用GROUP BY语句执行一个简单的除数查询,但要针对IN static_set子句,而不是针对另一个表。因为这是python,所以您已经知道静态集的大小。在
我假设您已经有一个数据库游标,并且该表名为GroupMembers:MEMBERSHIP_QUERY = '''
SELECT gm.group, mc.memberscount = %(len)s AS type
FROM groupmembers gm
JOIN (SELECT "group", COUNT(DISTINCT members) as memberscount
FROM groupmembers
GROUP BY "group") mc
ON gm.group = mc.group
WHERE gm.members IN %(set)s
GROUP BY gm.group, mc.memberscount
HAVING COUNT(DISTINCT gm.members) = %(len)s;
'''
def membership(members):
# obtain a cursor
for row in cursor.execute(MEMBERSHIP_QUERY, dict(len=len(members), set=members)):
yield dict(group=row[0], type=row[1])
因此,不需要使用临时表来执行此查询。在
如果您确实需要临时表用于其他目的,则使用^{}插入一组行最简单:
^{pr2}$
注意,.executemany()需要一个序列;每个条目都是一个行数据序列,在本例中,每个条目只包含一个名称。我生成一个单项元组的列表来填充表。在
或者,您也可以使用映射序列,并使用%(name)s参数语法(因此行数据序列变成[dict(name=name) for name in members])。在