Topic: RISOLTO:Postgresql psycopg2 UPDATE errore 'argument formats can't be mixed'  (Letto 270 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline pytony

  • python unicellularis
  • *
  • Post: 14
  • Punti reputazione: 0
    • Mostra profilo
Salve,

in uno script sono alla fase di update di una tabella con il db Postgresql e la libreria psycopg2 dove mi restituisce l'errore come in oggetto.

I valori che uso sono in una lista che passo alla funzione di update che sono gli stessi che uso nella funzione insert. Creo la query SQL parametrizzata in una variabile, i parametri in una variabile 'valori come dizionario. I valori del dizionario sono sia stringhe, interi e date. Ho provato ad escludere le date per capire se non coincideva il formato ma l'errore resta.


Per più chiarezza metto un po di codice:


def update(dati_device, cur):
    if settings.debug:
        print("sono in update")
    valori = {'vhostname':dati_device[1], 'vdefault_ipv4_address':dati_device[2], 'vdefault_ipv4_mac':dati_device[3], 'vdefault_ipv4_broadcast':dati_device[4], 'vdefault_ipv4_netmask':dati_device[5], 'vdefault_ipv4_gateway':dati_device[6], 'vprocessor':dati_device[7], 'vprocessor_core':dati_device[8], 'vmemtotal_mb':dati_device[9], 'vdevices_sda_model':dati_device[10], 'vdevices_sda_size':dati_device[11], 'vdevices_sdb_model':dati_device[12], 'vdevices_sdb_size':dati_device[13], 'vdistribution':dati_device[14], 'vdistribution_release':dati_device[15], 'vdistribution_version':dati_device[16], 'vdomain':dati_device[17], 'vsystem_vendor':dati_device[18], 'vproduct_version':dati_device[19], 'vbios_date': dati_device[20],'varchitecture':dati_device[21], 'vdate':dati_device[22],'vid_macchina': dati_device[0]}
    if settings.debug:
        print(valori)
    sql = """Update """ + settings.tabella + """ SET hostname = %(vhostname)s, default_ipv4_address = %(vdefault_ipv4_address)s, default_ipv4_mac = %(vdefault_ipv4_mac)s, default_ipv4_broadcast = %vdefault_ipv4_broadcast)s, default_ipv4_netmask = %vdefault_ipv4_netmask)s, default_ipv4_gateway = %(vdefault_ipv4_gateway)s, processor = %(vprocessor)s, processor_core = %(vprocessor_core)s, memtotal_mb = %(vmemtotal_mb)s, devices_sda_model = %(vdevices_sda_model)s, devices_sda_size = %(vdevices_sda_size)s, devices_sdb_model = %(vdevices_sdb_model)s, devices_sdb_size = %(vdevices_sdb_size)s, distribution = %(vdistribution)s, distribution_release = %(vdistribution_release)s, distribution_version = %(vdistribution_version)s, domain = %(vdomain)s, system_vendor = %(vsystem_vendor)s, product_version = %(vproduct_version)s, bios_date = %(vbios_date)s, architecture = %(varchitecture)s, date = %(vdate)s WHERE id_macchina=%(vid_macchina)s;"""
    if settings.debug:
        print(sql)
    try:
        cur.execute(sql, valori)
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)


Grazie in anticipo.
« Ultima modifica: Giugno 19, 2019, 15:34 da pytony »

Offline pytony

  • python unicellularis
  • *
  • Post: 14
  • Punti reputazione: 0
    • Mostra profilo
Re:Postgresql psycopg2 UPDATE errore 'argument formats can't be mixed'
« Risposta #1 il: Giugno 19, 2019, 15:34 »
Risolto.
con tutti qui parametri mi si incrociano gli occhi, mancavano 2 parentesi vicino al simbolo %

default_ipv4_broadcast = %vdefault_ipv4_broadcast)s, default_ipv4_netmask = %vdefault_ipv4_netmask)s