如何在Python中执行SQL查询并生成指定格式的文本文件
解决办法
你已经搞定了SQL查询和数据获取,只是结果格式不对而已——别担心,咱们几步就能把它转成你要的每行一条|分隔字符串的格式,还能保存成txt文件。
第一步:从结果字典里提取目标字符串
你拿到的res1是个包含字典的列表,每个字典里只有一对键值:键是你写的那个完整的SQL聚合函数,值就是咱们需要的|分隔字符串。用列表推导式就能快速把所有值捞出来:
# 把res1里每个字典的值提取出来,存成新列表 target_strings = [list(dict_item.values())[0] for dict_item in res1]
这里用list(dict_item.values())[0]是因为每个字典只有一个值,转成列表后取第一个元素就是咱们要的内容。
第二步:把字符串写入txt文件
接下来就是把这些字符串每行一条写入文件啦,两种方式都可以:
方式一:逐行写入
# 打开文件,指定utf-8编码避免乱码 with open('result.txt', 'w', encoding='utf-8') as txt_file: for line in target_strings: txt_file.write(line + '\n')
方式二:一次性写入(更高效)
with open('result.txt', 'w', encoding='utf-8') as txt_file: # 用换行符把所有字符串连起来,一次性写入 txt_file.write('\n'.join(target_strings))
整合后的完整代码
把这些步骤加到你原来的代码里,完整版本就是这样:
with db.cursor() as cur: query_meta1 = ("SELECT trim(CONCAT_WS('|',mtd.Master_Job_Name,Seq,Table_Name,Source_File_Name_Lnd,landingdfname,Target_Path,query,mtd.Execution_Sequence )) from imedical_master_metadata mtd inner join imedical_master_metadata_query mtq on (mtd.Master_Job_Name=mtq.Master_Job_Name) where mtd.Is_Active='Y' order by mtd.Execution_Sequence") cur.execute(query_meta1) res1 = cur.fetchall() # 提取需要的|分隔字符串 target_strings = [list(dict_item.values())[0] for dict_item in res1] # 写入txt文件 with open('result.txt', 'w', encoding='utf-8') as txt_file: txt_file.write('\n'.join(target_strings))
小提示
如果哪天你的数据库驱动返回的是元组列表(而不是字典),那提取会更简单:target_strings = [item[0] for item in res1],不过根据你的描述,现在用字典的提取方式就完全没问题。
内容的提问来源于stack exchange,提问作者jay
相关产品推荐
相关产品推荐

