繁体   English   中英

如何在数据库表中提交对 SQLAlchemy object 的更改

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM