用 SQLAlchemy 的 ORM 进行查询。那你就先要建立两张表的 ORM 模型,然后用 SQLAlchemy 的 join 功能进行连接,最后可以把结果转换为列表,再按所需进行组装。
代码如下:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class ATable(Base):
__tablename__ = 'A'
TID = Column(Integer, primary_key=True)
PID = Column(Integer)
Title = Column(String)
class BTable(Base):
__tablename__ = 'B'
GID = Column(Integer, primary_key=True)
PID = Column(Integer)
Name = Column(String)
engine = create_engine('sqlite:///:memory:')
Session = sessionmaker(bind=engine)
session = Session()
result = session.query(ATable, BTable).join(BTable, ATable.PID == BTable.PID).all()
data = []
for a, b in result:
if len(data) == 0 or data[-1]['TID'] != a.TID:
data.append({'TID': a.TID, 'PID': a.PID, 'Title': a.Title, 'Name': [b.Name]})
else:
data[-1]['Name'].append(b.Name)
print(data)
上面的代码使用了 SQLite 数据库,如果要使用其他数据库,要修改 create_engine 中的数据库链接字符串。