You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQLAlchemy对象的修改提交到数据库表及查看修改内容

问题原因拆解

  • 为什么第二次遍历data没有输出:session.execute()返回的是一次性迭代器,你第一次在翻译循环里已经把它的内容全部读完了,后续再遍历自然没有任何数据。
  • 为什么session.commit()没有生效:你修改的是execute返回的临时行对象,不属于被Session追踪的ORM实体实例,Session感知不到你对这个临时对象做的修改,自然不会同步到数据库。

解决步骤

第一步:先把数据持久化存储到本地,方便预览修改

不要直接用迭代器操作,先把查询结果转成DataFrame,方便后续查看修改内容:

# 查询后直接转成DataFrame,方便预览和处理
import pandas as pd
sql_stmt = "SELECT * FROM translate"
data_df = pd.read_sql(sql_stmt, engine)

# 这里就可以先查看原始数据
print(data_df.head())

第二步:执行翻译,过程中可以随时预览结果

注意googletrans的translate方法返回的是对象,要取.text属性才是翻译后的文本:

for idx, row in data_df.iterrows():
    # 翻译Label,目标语言英文,取text属性
    label_trans = translator.translate(row['Label'], dest='en').text
    # 翻译Answer
    answer_trans = translator.translate(row['Answer'], dest='en').text
    # 赋值到DataFrame对应位置
    data_df.loc[idx, 'Label_Translated'] = label_trans
    data_df.loc[idx, 'Answer_Translated'] = answer_trans

# ******** 这里就可以查看修改后的内容,确认没问题再写入数据库 ********
print(data_df[['Label', 'Label_Translated', 'Answer', 'Answer_Translated']])

第三步:把修改后的数据同步回MySQL

新手推荐直接用pandas的to_sql方法,操作简单不容易出错:

# 把修改后的DataFrame写回translate表,替换原有数据
data_df.to_sql(name='translate', con=engine, if_exists='replace', index=False)

如果不想整表替换,也可以用批量update的写法,性能更高:

with engine.connect() as conn:
    for _, row in data_df.iterrows():
        update_sql = """
        UPDATE translate 
        SET Label_Translated = %s, Answer_Translated = %s 
        WHERE Label = %s AND Answer = %s
        """
        conn.execute(update_sql, (row['Label_Translated'], row['Answer_Translated'], row['Label'], row['Answer']))
    conn.commit()

额外注意事项

  • googletrans默认接口稳定性一般,如果遇到翻译报错可以指定服务域名:translator = Translator(service_urls=['translate.google.cn'])
  • 数据量大的话不要逐行翻译,可以批量传值给translate方法提升效率

内容的提问来源于stack exchange,提问作者Karthik S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:04