如何使用Python和SQL合并同一fk_case_id对应的多行文本内容
两种实现方案
方案1:SQL层面直接实现(性能最优,推荐)
直接在查询时用数据库自带的分组拼接函数,一次查询得到结果,不需要额外在代码里遍历处理。
不同数据库对应的函数如下:
- MySQL:使用
GROUP_CONCAT函数,指定分隔符为空格即可 - PostgreSQL/SQL Server:使用
STRING_AGG函数
MySQL示例代码:
from connect_database import mycursor,db # 按fk_case_id分组,用空格拼接同组的content mycursor.execute("SELECT fk_case_id, GROUP_CONCAT(content SEPARATOR ' ') AS full_content FROM mt_page_file_contents GROUP BY fk_case_id") myresult = mycursor.fetchall() for x in myresult: fk_case_id = x[0] full_text = x[1] # 此处可直接使用分组拼接后的结果
查询结果样例:
| fk_case_id | full_content |
|---|---|
| 468 | This is to inform the record tommorrow for studies |
| 469 | Hello welcome to school |
方案2:Python代码层面处理(无需修改SQL查询语句)
如果不方便调整SQL逻辑,直接对现有的查询结果用字典做分组拼接即可,代码如下:
from connect_database import mycursor,db mycursor.execute("select content,pk_content_id,fk_case_id from mt_page_file_contents") myresult = mycursor.fetchall() # 初始化字典存储分组结果,key为fk_case_id,value为拼接后的完整文本 case_content_map = {} for x in myresult: content = x[0] fk_case_id = x[2] if fk_case_id not in case_content_map: case_content_map[fk_case_id] = content else: # 同组内容用空格拼接 case_content_map[fk_case_id] += f" {content}" # 遍历得到最终的分组拼接结果 for fk_case_id, full_text in case_content_map.items(): # 此处可处理每个case的完整文本 print(fk_case_id, full_text)
内容的提问来源于stack exchange,提问作者user17040675
相关产品推荐
相关产品推荐

