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.

No se puede actualizar una variable de tipo varchar con una cadena que incluya un punto (.)

Tengo un error bastante raro en SQL. Estoy intentando actualizar un campo de la base de datos utilizando la biblioteca pyodbc en python. La consulta es la siguiente:

UPDATE companyies SET primary_domain='vilatec.com' WHERE codi='1c44f4dd-b54c-4982-9eaa-b1baef92a65f';

Como puedes ver, vilatec.com es una cadena de texto. En realidad, esto se actualiza en mi base de datos, pero luego obtengo el error:
The multi-part identifier 'vilatec.com' could not be found

Parece que no está leyendo vilatec.com como una cadena de texto, sino como una referencia, pero de todos modos se actualiza. ¿Qué me recomiendas hacer? ¿Hay alguna manera de referir el carácter “.” para que no produzca este error o debería ignorar esta excepción?

Conexión:

connection = pyodbc.connect(driver=driver, server=server, user=user_db, password=password, database=database)
cur = connection.cursor()

Este es el código:

query = """UPDATE companyies SET primary<em>domain='vilatec.com' WHERE codi= '1c44f4dd-b54c-4982-9eaa-b1baef92a65f';"""
execute</em>sql(query,cur,connection)
def execute_sql(query,cur,connection):
    cur.execute(query)
    connection.commit()

La consulta original era:

UPDATE companyies SET primary_domain='{0}' WHERE codi='{1}';
donde primary_domain es ‘vilatec.com’

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede evitar el error utilizando comillas alrededor de la cadena vilatec.com en la consulta SQL. Puede modificar la consulta a UPDATE companies SET primary_domain='vilatec.com' WHERE codi='1c44f4dd-b54c-4982-9eaa-b1baef92a65f';.

    En general, se recomienda usar declaraciones preparadas o consultas parametrizadas, en lugar de construir consultas SQL con cadenas, para prevenir ataques de inyección SQL y manejar correctamente los caracteres especiales. Puede utilizar marcadores de posición y pasar los valores como parámetros, en lugar de dar formato a la cadena de consulta, así:

    query = "UPDATE companies SET primary_domain=? WHERE codi=?"
    values = ('vilatec.com', '1c44f4dd-b54c-4982-9eaa-b1baef92a65f')
    cur.execute(query, values)
    

    Esto manejará correctamente los caracteres especiales y prevenirá ataques de inyección SQL.

Comments are closed.