如何在SQLAlchemy对象上使用googletrans的Translator翻译MySQL表字段
问题原因
session.execute()返回的是Result可迭代对象,仅支持一次遍历,第一次循环执行翻译操作时已经把迭代器完全消耗,第二次循环打印时游标已经走到末尾,自然没有任何输出- 你直接对
data整体新增col1_Translated、col2_Translated属性,没有将翻译结果绑定到对应行数据上,就算能完成第二次遍历也无法获取每行对应的翻译结果 googletrans的translate()方法返回的是结构化翻译对象,需要取.text属性才能拿到实际的翻译文本内容
正确实现方案
方案1:转成列表存储处理后的数据
# 读取数据时直接转为列表,避免迭代器耗尽问题 sql_stmt = "SELECT * FROM translate" data = session.execute(sql_stmt).all() translated_result = [] for to_translate in data: # 转成字典方便扩展字段 row = dict(to_translate._mapping) # 翻译后取文本内容存入字典 row['col1_Translated'] = translator.translate(row['col1'], dest='en').text row['col2_Translated'] = translator.translate(row['col2'], dest='en').text translated_result.append(row) # 验证翻译结果 for row in translated_result: print(row['col1'], row['col1_Translated'], row['col2'], row['col2_Translated'])
方案2:结合Pandas处理更简便
import pandas as pd # 直接从SQL读取数据到DataFrame df = pd.read_sql("SELECT * FROM translate", engine) # 批量完成字段翻译 df['col1_Translated'] = df['col1'].apply(lambda x: translator.translate(x, dest='en').text) df['col2_Translated'] = df['col2'].apply(lambda x: translator.translate(x, dest='en').text) # 验证结果 print(df[['col1', 'col1_Translated', 'col2', 'col2_Translated']])
内容的提问来源于stack exchange,提问作者Karthik S
相关产品推荐
相关产品推荐

