我想使用 sqlalchemy 从这样的表中获取子列表:
Column1 Column2
a 1
a 2
b 1
b 2
首先得到
Column1 Column2
a 1
a 2
其次得到
Column1 Column2
b 1
b 2
我可以通过执行一次查询语言来实现它吗?
你可以用一个查询来完成,但你需要在 Python 中执行分组。为此,您可以使用itertools.groupby
来处理查询结果,这些查询结果将按 ( column1
, column2
) 排序。下面是一个示例:
from itertools import groupby
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class Stuff(Base):
__tablename__ = 'stuff'
id = Column(Integer, primary_key=True)
column1 = Column(String(10))
column2 = Column(String(10))
def __repr__(self):
return '({}, {})'.format(self.column1, self.column2)
db_url = 'sqlite:////tmp/test.db'
engine = create_engine(db_url)
Base.metadata.bind = engine
session = sessionmaker(bind=engine)()
for k, g in groupby(session.query(Stuff).order_by(Stuff.column1, Stuff.column2),
key=lambda stuff: stuff.column1):
print('{}: {}'.format(k, ','.join(stuff.column2 for stuff in g)))
如果您的表包含以下数据:
列 1 列 2 一 1 一 2 b 1 b 2 一 3
输出将是:
答:1,2,3乙: 1,2
若要处理数据,请将 for 循环中的print()
替换为处理代码。