如何提交对数据库中 SQLAlchemy 对象的更改 table

how to commit changes to SQLAlchemy object in the database table

我正在尝试使用 Python 的 googletrans 库翻译我的 MySQL 数据库中的一组列。

样本MySQLtable数据:

Label        Answer               Label_Translated  Answer_Translated
cómo estás   Wie heißen sie?      NULL              NULL
wie gehts    per favore rivisita  NULL              NULL
元気ですか    Cuántos años tienes  NULL              NULL

下面是我的示例代码:

import pandas as pd
import googletrans
from googletrans import Translator
import sqlalchemy
import pymysql
import numpy as np
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
engine = create_engine("mysql+pymysql:.....")
Session = sessionmaker(bind = engine)
session = Session()
translator = Translator()

我读取数据库 table 使用:

sql_stmt = "SELECT * FROM translate"
data = session.execute(sql_stmt)

我使用以下方法执行翻译步骤:

for to_translate in data:
    to_translate.Answer_Translated = translator.translate(to_translate.Answer, dest = 'en')
    to_translate.Label_Translated = translator.translate(to_translate.Label, dest = 'en')

我试过 session.commit() 但更改没有反映在数据库中。有人可以告诉我如何使数据库中的更改永久化吗?

当我尝试时:

for rows in data:
    print(rows)

我没有看到任何输出。在数据库中执行更改之前,有没有办法我们可以查看 Python 中的更改?

重写我的答案,因为我错过了 OP 使用原始查询来获取他的集合。

您的问题似乎是您的代码中没有真正的更新逻辑(尽管您可能错过了这一点。这是您可以做的。请记住,这不是最有效或最优雅的处理方式有了这个,但这可能会让你朝着正确的方向前进。

# assuming import sqlalchemy as sa

for to_translate in data:
    session = Session()
    print(to_translate)
    mappings = {}
    mappings['Label'] = to_translate[0]
    mappings['Answer_Translated'] = translator.translate(to_translate.Answer, dest="en")
    mappings['Label_Translated'] = translator.translate(to_translate.Label, dest="en")
    update_str = "update Data set Answer_Translated=:Answer_Translated, set Label_Translated=:Label_Translated where Label == :Label"
    session.execute(sa.text(update_str), mappings)
    session.commit()

这将更新您的数据库。现在我不能保证它会开箱即用,因为您的实际 table 可能与您发布的示例不同,但打印语句应该能够指导您修复 update_str。请注意,使用 ORM 会使这变得更好。