如何提交对数据库中 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 会使这变得更好。
我正在尝试使用 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 会使这变得更好。