es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo realizar cambios en los objetos de SQLAlchemy en la tabla de la base de datos.

Estoy intentando traducir un conjunto de columnas en mi base de datos MySQL utilizando la biblioteca de Python googletrans.

Tabla de muestra de MySQL:

Etiqueta Respuesta Etiqueta_Traducida Respuesta_Traducida
cómo estás Wie heißen sie? NULO NULO
wie gehts per favore rivisita NULO NULO
元気ですか Cuántos años tienes NULO NULO

Este es mi código de muestra:

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()

Leo la tabla de la base de datos usando:

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

Realizo las etapas de traducción utilizando:

para traducir en datos:
    to_translate.Answer_Translated = translator.translate(to_translate.Answer, dest='en')
    to_translate.Label_Translated = translator.translate(to_translate.Label, dest='en')

Intenté session.commit(), pero los cambios no se reflejan en la base de datos. ¿Podría alguien decirme cómo hacer que los cambios sean permanentes en la base de datos?

También cuando intento:

para filas en datos:
    imprimir(filas)

No veo ninguna salida. ¿Hay alguna forma de ver los cambios en Python antes de aplicarlos a la base de datos?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que los cambios sean permanentes en la base de datos, necesitas agregar una sentencia session.commit() después de completar la traducción para todas las filas. Esto comprometerá los cambios en la base de datos.

    El código actualizado se verá así:

    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').text
        to_translate.Label_Translated = translator.translate(to_translate.Label, dest = 'en').text
    
    session.commit()
    
    

    Para ver los cambios en Python, puedes iterar sobre la variable data nuevamente e imprimir las filas. El código actualizado se verá así:

    for rows in data:
        print(rows)
    

    Asegúrate de ejecutar este código después de comprometer los cambios en la base de datos, de lo contrario no verás los valores actualizados.

Comments are closed.