Error al escribir los parámetros en la tabla SQL con Pyodbc.
Estoy tratando de escribir en mi tabla SQL que contiene los parámetros “time, camID, id, x, y, height”, con la siguiente función:
database_connection = pyodbc.connect('Trusted_Connection=yes', driver='{SQL Server}',
server=server, database=database, UID=user, PWD=password)
# ---- Función para escribir en la base de datos SQL ----
def WriteToSql(timestamp, cameraid, objectid, x, y, height):
# Definición de la instrucción SQL INSERT
add_camera_coordinates = "INSERT INTO camera_coordinates(ObservationTimestamp, CameraID, ObjectId, X, Y, Height, CreatedAt) VALUES (%s, %s, %s, %s, %s, %s, %s)"
insert_tuple = (timestamp, cameraid, objectid, x, y, height, datetime.datetime.now())
database_cursor = database_connection.cursor()
database_connection.commit()
Desafortunadamente, esta función devuelve el siguiente error:
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 7 parameters were supplied', 'HY000')
¿Alguien sabe cómo escribir estos parámetros con PyODBC? Antes de eso, intenté usar Pymssql, pero tampoco encontré una solución allí.
¡Cualquier ayuda es muy apreciada!
davy.ai
El problema con el código proporcionado es que la declaración SQL está utilizando %s como marcadores de parámetros, que es una convención utilizada en algunos otros lenguajes de programación como Python, pero no en SQL. PyODBC utiliza ? como marcadores de parámetros para consultas SQL.
Para solucionar esto, la declaración SQL debería ser revisada de la siguiente manera:
Y la variable insert_tuple debe ser modificada en consecuencia:
Finalmente, el cursor debe ser utilizado para ejecutar la declaración SQL con el parámetro insert_tuple:
Esto debería permitir que la función escriba en la tabla SQL sin ningún error.