Error paremetros ? en query SQL Server (ODBC)

Buenos dias! estoy comenzando en Python y me encuentro atascado con una query sql que recibe parametros como filtro de campos fecha desde…hasta y un campo tipo lista con la seleccion de uno o mas comprobantes, con .format(‘,’.join(‘?’*len(lista)) consegui enviar a la consulta tantos parametros como valores tenga la lista pero al agregar parametro de fecha da error de cantidad de parametros:

  1. solo con el parametro de lista de comprobantes funciona:
    def querysql(lista):
    query=(“”“SELECT FECHA_VTO,COD_PROVEE,N_COMP,IMPORTE FROM PAGOS_BANCO WHERE N_COMP IN ({})”“”.format(‘,’.join(‘?’*len(lista))),lista)
    print(query)
    (‘SELECT FECHA_VTO,COD_PROVEE,N_COMP,IMPORTE FROM PAGOS_BANCO WHERE N_COMP IN (?,?)’, [‘A0000100000504’, ‘A0000400002546’])

  2. Agregando el parametro de fecha da error de cantidad de parametros:
    def querysql(lista,fecha1):
    query=(“”“SELECT FECHA_VTO,COD_PROVEE,N_COMP,IMPORTE FROM PAGOS_BANCO WHERE N_COMP IN ({}) AND FECHA_VTO>{}”“”.format(‘,’.join(‘?’*len(lista)),‘?’),lista,fecha1)
    print(query)
    (‘SELECT FECHA_VTO,COD_PROVEE,N_COMP,IMPORTE FROM PAGOS_BANCO WHERE N_COMP IN (?,?) AND FECHA_VTO>?’, [‘A0000100000504’, ‘A0000400002546’], ‘15-05-2000’)

pyodbc.ProgrammingError: (‘The SQL contains 3 parameter markers, but 2 parameters were supplied’, ‘HY000’)

gracias por la ayuda o algun consejo!

Hola, el tema es que estas pasando 2 parametros (una lista con los
valores ‘A0000100000504’ y ‘A0000400002546’, y la fecha). tenes que
separar el array para que sean valores separados

texto = “SELECT FECHA_VTO,COD_PROVEE,N_COMP,IMPORTE FROM PAGOS_BANCO
WHERE N_COMP IN ({}) AND FECHA_VTO>{}”
query=(texto.format(‘,’.join(‘?’*len(lista)),‘?’), *lista, fecha1)

Saludos,

Javier.

1 me gusta

Muchísimas gracias Javier por la rápida respuesta! pude hacer funcionar la query con tu ayuda, me faltaba el asterisco (*args) para indicar el numero de argumento variable en la función.
abrazo

1 me gusta