[英]how to commit changes to SQLAlchemy object in the database table
我正在尝试使用 Python 的googletrans
库翻译 MySQL 数据库中的一组列。
样品 MySQL 表数据:
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()
我使用以下方法读取数据库表:
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)
我没有看到任何 output。 在执行数据库中的更改之前,有没有办法可以查看 Python 中的更改?
因为我错过了 OP 而重写我的答案是使用原始查询来获取他的集合。
您的问题似乎是您的代码中没有真正的更新逻辑(尽管您可能错过了这一点。这是您可以做的。请记住,这不是处理这个问题的最有效或最优雅的方法,但是这个可能会让你朝着正确的方向前进。
for to_translate in data:
session = Session()
print(to_translate)
Label = to_translate[0]
Answer_Translated = translator.translate(to_translate.Answer, dest="en")
Label_Translated = translator.translate(to_translate.Label, dest="en")
update_str = f"update Data set Answer_Translated={Answer_Translated}, set Label_Translated={Label_Translated} where Label == {Label}"
session.execute(update_str)
session.commit()
这将更新您的数据库。 现在我不能保证它会开箱即用,因为您的实际表格可能与您发布的示例不同,但打印语句应该能够指导您修复update_str
。 请注意,使用 ORM 会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.