Topic: [RISOLTO] - pymysql - UPDATE non funziona.  (Letto 171 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Esimplex

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
[RISOLTO] - pymysql - UPDATE non funziona.
« il: Ottobre 22, 2018, 13:11 »
Salve a tutti, sono un novizio come programmazione in generale e Python in particolare. 
Ho dei problemi con l'id di questo script, nel senso che se lo inserisco a mano funziona mentre se inserito attraverso la variabile id in input non ne vuole sapere.
Dove sbaglio?

        db = pymysql.connect("localhost", "root", "", "test")
        cursor = db.cursor()

        id = input("Inserisci ID: ")
        nome = input("Inserisci il Nome: ")
        cognome = input("Inserisci il Cognome: ")
        dataDiNascita = input("Inserisci la data di nascita AA-MM-GG: ")
        sesso = input("Inserisci sesso M/F: ")

        sql = "UPDATE persone SET nome = %s, cognome = %s, dataDiNascita = %s, sesso = %s WHERE id = %s"       # WHERE id = 28"
        val = (nome, cognome, dataDiNascita, sesso)
        cursor.execute(sql, val)

        db.commit()
        print(cursor.rowcount, "record(s) sostituiti")
        db.close()
« Ultima modifica: Ottobre 22, 2018, 16:18 da Esimplex »

Offline nuzzopippo

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re:pymysql - UPDATE non funziona.
« Risposta #1 il: Ottobre 22, 2018, 13:29 »
Son novizio e, oltretutto, non conosco myqul, prendimi con molle da 1 Km ma :
1° nella tupla "val" non vedo valorizzata la variabile "id"
2° "id" è una funzione bultins di python, vedi giù, in ogni caso converrebbe denominare diversamente quella variabile

>>> help('id')
Help on built-in function id in module builtins:

id(obj, /)
    Return the identity of an object.
   
    This is guaranteed to be unique among simultaneously existing objects.
    (CPython uses the object's memory address.)

>>>

Offline Esimplex

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
Re:pymysql - UPDATE non funziona.
« Risposta #2 il: Ottobre 22, 2018, 15:00 »
Grazie per avermi risposto, ho modificato lo script, ma ancora non funziona.
        db = pymysql.connect("localhost", "root", "", "test")
        cursor = db.cursor()

        persone_id = input("Inserisci persone_id: ")
        nome = input("Inserisci il Nome: ")
        cognome = input("Inserisci il Cognome: ")
        dataDiNascita = input("Inserisci la data di nascita AA-MM-GG: ")
        sesso = input("Inserisci sesso M/F: ")

        sql = "UPDATE persone SET persone_id = %s, nome = %s, cognome = %s, dataDiNascita = %s, sesso = %s WHERE persone_id = %s"
        val = (persone_id, nome, cognome, dataDiNascita, sesso)
        cursor.execute(sql, val)

        db.commit()
        print(cursor.rowcount, "record(s) sostituiti")
        db.close()


Questo è l'errore che mi da.

Traceback (most recent call last):
  File "/home/mauro/PyCharm-workspace/Prova/DB/database.py", line 109, in <module>
    cursor.execute(sql, val)
  File "/usr/lib/python3.7/site-packages/pymysql/cursors.py", line 168, in execute
    query = self.mogrify(query, args)
  File "/usr/lib/python3.7/site-packages/pymysql/cursors.py", line 147, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string

Offline nuzzopippo

  • python unicellularis
  • *
  • Post: 7
  • Punti reputazione: 0
    • Mostra profilo
Re:pymysql - UPDATE non funziona.
« Risposta #3 il: Ottobre 22, 2018, 15:58 »
Lo "id" che avevo indicato era suggerito per il solo e puro codice python, non per la costruzione della stringa SQL (UPDATE...) ove devi rispettare la denominazione dei relativi campi nel database.
L'errore che ricevi indica che manca un valore nella tupla "var", deve esserci un valore per ogni singolo " %s" della query, nello specifico dell'ultimo post, doveva essere indicato una seconda volta "persona_id" in ultima posizione in "var".
Detto questo, brutto quel " SET persona_id", dato che persona_id é il discriminante del WERE ... Non ha ragione di essere modificato, non credi?

Offline Esimplex

  • python unicellularis
  • *
  • Post: 3
  • Punti reputazione: 0
    • Mostra profilo
[RISOLTO] - pymysql - UPDATE non funziona.
« Risposta #4 il: Ottobre 22, 2018, 16:15 »
Risolto, grazie ai tuoi consigli funziona perfettamente  :) di seguito il codice.
        db = pymysql.connect("localhost", "root", "", "test")
        cursor = db.cursor()

        persone_id = input("Inserisci persone_id: ")
        nome = input("Inserisci il Nome: ")
        cognome = input("Inserisci il Cognome: ")
        dataDiNascita = input("Inserisci la data di nascita AA-MM-GG: ")
        sesso = input("Inserisci sesso M/F: ")

        sql = "UPDATE persone SET nome = %s, cognome = %s, dataDiNascita = %s, sesso = %s WHERE persone_id = %s"
        val = (nome, cognome, dataDiNascita, sesso, persone_id)
        cursor.execute(sql, val)

        db.commit()
        print(cursor.rowcount, "record(s) sostituiti")
        db.close()