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.

Usando SELECT y VALUES juntos en una declaración INSERT

Tengo una consulta como parte de un código Python en la que la consulta requiere hacer uso de variables en el programa, así como valores de otra base de datos. Estoy utilizando mysql-connector-python.

Los valores de name están presentes en el programa Python y quiero usar eso y los valores de la tabla metrics para insertar valores en la tabla points.

Esto es lo que he intentado hasta ahora:

class summer:
    def __init__(self, name):
        self.name = name

    def sum_fun(self, name):

        try:
            con = mysql.connector.connect(host='localhost',
                                          database='databasename',
                                          user='root',
                                          password='mypasword',
                                          charset='utf8')

            if con.is_connected():
                cursor = con.cursor(buffered=True)

                def create_points_table():
                    query=("INSERT INTO points(username, sale,comm,dank) VALUES (%s, (SELECT SUM(regional + intnl) * 150, SUM(commission) * 50, SUM(thank_discount) * 10 FROM Metrics))")
                    cursor.execute(query, (name))
                    con.commit()
                create_points_table();

        except Error as e:
            print(e)

        cursor.close()
        con.close()

La consulta:

query=("INSERT INTO points(username, sale,comm,dank) 
       VALUES (%s, 
       (SELECT 
          SUM(regional + intnl) * 150, 
          SUM(commission) * 50, 
          SUM(thank_discount) * 10 FROM Metrics))")

Llamada a la consulta:

cursor.execute(query, (name))

Ninguno de los valores se está insertando en la tabla “points”. ¿Qué estoy haciendo mal aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es importante verificar errores al trabajar con consultas SQL, especialmente con las inserciones. Un problema potencial en este código es que la sección VALUES de la consulta está tratando de insertar tres valores separados, pero la función cursor.execute solo pasa un valor para (name).

    Para solucionar esto, podemos modificar la consulta y la función cursor.execute para incluir todas las variables necesarias:

    query = ("INSERT INTO points(username, sale, comm, dank) " 
             "SELECT %s, SUM(regional + intnl) * 150, SUM(commission) * 50, "
             "SUM(thank_discount) * 10 FROM Metrics")
    
    cursor.execute(query, (name,))
    

    En esta consulta modificada, username recibe el valor de (name) que se pasa a través de la función, y los valores restantes se calculan mediante la declaración SELECT utilizando datos de la tabla Metrics.

    También es importante tener en cuenta que debemos incluir una coma después de (name) en la función cursor.execute para asegurarnos de que se pase como una tupla, como lo requiere la función.

    Además, es una buena práctica envolver las declaraciones SQL entre comillas triples para evitar problemas con caracteres especiales.

    Con estos cambios, la función debería poder insertar los valores necesarios en la tabla points.

Comments are closed.