Profilo di Kestrel

Nome Kestrel
Indirizzo email n/a
Messaggi12
  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Perfetto, mi metto a lavoro e se sarà il caso (molto probabilmente) tornerò con tuo permesso a romperti le p.....e. :D :D :D


    Magari aprendo un altro post.





    Grazie


  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Buongiorno,




    sto andando avanti con il codice, apliandolo e risolvendo i problemi che via via incontro, e questo anche grazie ai Vs. prezioni consigli. Vi posto il codice:




    import pymysql.cursors
    import datetime
    
    
    print("Benvenuto nel programma EasyMoney")
    # Connessione
    conn = pymysql.connect(host="localhost",
                                 user="root",
                                 password="123",
                                 db="cassa",
                                 charset="utf8mb4",
                                 autocommit=True,)
    
    #Andiamo a leggere l'ultimo valore della tavbella movimenti colonna Saldo
    
    try:
        cursor = conn.cursor()
        sql_saldo = "SELECT Saldo FROM movimenti ORDER BY ID Movimento DESC LIMIT 1;"
        cursor.execute(sql_saldo)
        read_db = cursor.fetchone()
        if read_db == None:
            saldo = 0
        else:
            saldo = float(read_db[0])
        print('Il saldo attuale è €: ',saldo)
    except:
        print('Errore!!')
    
    # Blocco Variabili da input utente
    
    date = input('Inserisci data in formato DD/MM/YYYY: ')
    day, month, year = map(int, date.split('/'))
    datam = datetime.date(year, month, day)
    causale = int(input("Inserire 1 per Entrata e 2 per Uscita :"))
    descr = input("Descrizione movimento: ")
    importo = float(input("Importo: "))
    
    # Scrittura database
    
    try:
        with conn.cursor() as cursor:
            sql_insert = "INSERT INTO movimenti (DataMovimento, ID Causale, Descrizione, Importo, Saldo) VALUES( %s, %s, %s, %s, %s)"
            if causale == 1 and saldo == 0:
               saldo = importo
            elif causale == 1 and saldo > 0:
               saldo = saldo + importo
            elif causale == 2 and saldo == 0:
                print("ATTENZIONE!! - Disponibilità in cassa non sufficente!")
                 # Trovare la fuzione che ritorna alla scelta della causale
            elif causale == 2 and saldo > importo:
                saldo = saldo - importo
            cursor.execute(sql_insert, (datam, causale, descr, importo, saldo))
    
    
        with conn.cursor() as cursor:
            sql_select = "SELECT DataMovimento, ID Causale, Descrizione, Importo, Saldo FROM movimenti"
            cursor.execute(sql_select)
            #print("Data - Causale - Descrizione - Importo - Saldo")
            results = cursor.fetchall()
            for row in results:
                print(results)
    finally:
        conn.close()
    Vi chiedo ancora un consiglio, Vi ho evidenazito nel codice un elif nella sezione di scrittura dati nel DB. Vorrei infatti che in quella circostanza mi rimandasse indietro negli input per modificare la causale. Come posso fare?




    Un ultima cosa, come posso cercare la documentazione per formattare l'output della funzione print in modo da avere qualcosa del genere

    data: / / - descrzoine - importo 0,00 e saldo 0.00


    data: / / - descrzoine - importo 0,00 e saldo 0.00


    data: / / - descrzoine - importo 0,00 e saldo 0.00

    ec....




    Grazie






  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    :) L'avevo vista, ma mi sono perso nelle informazioni e non l'ho visto. Bisogna a essere capaci anche a leggere la documentazione.




    Scusa il fastidio :angel:

  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Posso chiederti dove hai trovato la documentazione? Perché io non la trovo o non ne comprendo appieno il significato. Infatti per un neofita come me è facile perdersi nelle innumerevoli informazioni che si possono trovare.


    Apprezzo molto il tuo aiuto e ti ringrazio per la pazienza e l'impegno che ci metti.

    Quindi devo vedere bene la classe cursor della pymysql

    Saluti



    --- Ultima modifica di Kestrel in data 2018-10-04 15:38:47 ---
  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    :) State tranquilli che non sono così ignorante (nel senso che ignoro 😁 un concetto così basilare)




    A parte gli scherzi il database chiamato cassa contiene due tabelle:

    1 causale


    IDCausale chiave primaria con incremento automatico


    Causale varchar(45)




    2 movimenti


    IDMovimento chiave primaria auto incremento

    DataMovimento date

    IDCausale int

    Descrizione varchar(45)

    Importo double

    Saldo double





    Considera a che che se cancello tutte le righe, quindi database vuoto, all'avvio dello script mi da effettivamente saldo zero e dopo il primo inserimento lo script come puoi vedere dal codice trasferisce al database una variabile float e il saldo mi viene aggiornato.




    Help! :sarcastic:










  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Vi ringrazio per le dritte che mi avete dato ma non ho trovato nessuna risposta sia per quanto riguarda il recupero di valori dal database come tupla e non come dizionario e sia sulla funzione cursors per intercettare l'ultima riga del dabase





    Il pacchetto PyMySql dovrebbe contenere la libreria pura MySql basata sul PEP 249. In quest'ultima non ho trovato risposta



    Avete suggerimenti su dove e con quali criteri effettuare la ricerca per avere maggiori informazioni?

    Grazie




  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Per completezza del post e per darne fruizione a tutti coloro che ne hanno bisogno posto il codice con cui ho risolto:




    # Inserimento dati e memorizzazione variabili
    date = input('Inserisci data in formato DD-MM-YYYY: ')
    day, month, year = map(int, date.split('-'))
    datam = datetime.date(year, month, day)
    causale = int(input("Inserire 1 per Entrata e 2 per Uscita :"))
    descr = input("Descrizione movimento: ")
    importo = float(input("Importo: "))
    Ne approfitto per farVi un altra domanda.

    Vorrei che all'avvio del script in questo caso (futuro programmino quando avrò acquisito le conoscenze) si vada a leggere un dato, in questo caso il saldo nell'ultima riga della tabella e memorizzi tale dato in una variabile.




    Non ho trovato nessuna informazione ne sul libro che sto leggendo ( Pensare in Python di Allen Downey) ne online.




    Il codice che ho utilizzato è:




    import pymysql.cursors
    import datetime
    
    print('Benvenuto nel programma Cassa')
    # Connessione
    connection = pymysql.connect(host='localhost',
                                 user='root',
                                 password='123',
                                 db='cassa',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    
    #Andiamo a leggere l'ultimo valore della tavbella movimenti colonna Saldo
    
    try:
        cursor = connection.cursor() 
        sql_saldo = "SELECT Saldo From movimenti"
        cursor.execute(sql_saldo)
        _saldo = cursor.fetchone()
        if _saldo == None:
            saldo = 0
        else :
            saldo = _saldo
        print('Il saldo attuale è: ',saldo)
    except:
        print ('Errore!!!!)    
    
    # Inserimento dati e memorizzazione variabili
    date = input('Inserisci data in formato DD-MM-YYYY: ')
    day, month, year = map(int, date.split('-'))
    datam = datetime.date(year, month, day)
    causale = int(input("Inserire 1 per Entrata e 2 per Uscita :"))
    descr = input("Descrizione movimento: ")
    importo = float(input("Importo: "))
    saldof = float(saldo)
    # Scrittura database
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO movimenti (DataMovimento, ID Causale, Descrizione, Importo, Saldo) VALUES( %s, %s, %s, %s, %s)"
            if causale == 1:
               saldo = saldof + importo
            elif causale == 2:
               saldo = saldof - importo
               
            cursor.execute(sql, (datam, causale, descr, importo, saldof))
            connection.commit()
    
        with connection.cursor() as cursor:
            sql1 = "SELECT DataMovimento, ID Causale, Descrizione, Importo, Saldo FROM movimenti"
            cursor.execute(sql1)
            for riga in cursor.fetchall():
                print(riga)
    finally:
        connection.close()
    


    L'errore è:





    Benvenuto nel programma Cassa
    Il saldo attuale è:  {'Saldo': 350.5}
    Inserisci data in formato DD-MM-YYYY: 02-10-2018
    Inserire 1 per Entrata e 2 per Uscita :1
    Descrizione movimento: Incasso
    Importo: 235
    Traceback (most recent call last):
      File "C:\Users\Utente\Desktop\Bozza Programma.py", line 35, in <module>
        saldof = float(saldo)
    TypeError: float() argument must be a string or a number, not 'dict'
    >>> 
    che da quello che ho capito è proprio il type della variabile che ho letto dal database.




    Spero di non essere andato off topic.




    Saluti



    --- Ultima modifica di Kestrel in data 2018-10-03 12:01:40 ---
  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Grazie per la dritta, ho risolto così. Accetto pareri e consigli sulla modifica a Voi esperti.




    import pymysql.cursors
    
    # Connessione
    connection = pymysql.connect(host='localhost',
                                 user='root',
                                 password='123',
                                 db='cassa',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    # Inserimento dati e memorizzazione variabili
    datam = input("Data Movimento: ")
    causale = input("Inserire 1 per Entrata e 2 per Uscita :")
    descr = input("Descrizione movimento: ")
    importo = input("Importo: ")
    
    # Scrittura database
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO movimenti (DataMovimento, ID Causale, Descrizione, Importo) VALUES( %s, %s, %s, %s)"
            cursor.execute(sql, (datam, causale, descr, importo))
            connection.commit()
    
        with connection.cursor() as cursor:
            sql1 = "SELECT DataMovimento, ID Causale, Descrizione, Importo, Saldo FROM movimenti"
            cursor.execute(sql1)
            result = cursor.fetchall()
            print(result)
    finally:
        connection.close()
    Oltre a chiederVi consiglio sulla modifica applicata vorrei sapere come formattare le variabili che andrò ad inserire nel database. Ho riscontrato problemi sulla data (date) e Importo (sul databaseimpostato come double), perchè mi dava errore. Per farlo funzionare ho messo a tutti Varchar()




    A voi possono sembrare cose banali ma a me no.

    Grazie e saluti

  • Re: pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Questo
    Traceback (most recent call last):
      File "C:\Users\Utente\Desktop\Inserimento e lettura.py", line 20, in <module>
        cursor.execute(sql)
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 170, in execute
        result = self._query(query)
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 328, in _query
        conn.query(q)
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 516, in query
        self._affected_rows = self._read_query_result(unbuffered=unbuffered)
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 727, in _read_query_result
        result.read()
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 1066, in read
        first_packet = self.connection._read_packet()
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\connections.py", line 683, in _read_packet
        packet.check_error()
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\protocol.py", line 220, in check_error
        err.raise_mysql_exception(self._data)
      File "C:\Users\UtenteAppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
        raise errorclass(errno, errval)
    pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''movimenti' ('DataMovimento', 'Causale', 'Descrizione', 'Importo') VALUES('1/10/' at line 1")


    --- Ultima modifica di Kestrel in data 2018-10-01 18:47:54 ---
  • pymysql.err.ProgrammingError: (1064...
    Forum >> Programmazione Python >> Database
    Buongiorno,




    sto smanettando su python e database ma mi sono imbattuto in questo errore. Non riesco a capire l'errore. Qualcuno mi da una dritta?

    Il database (cassa) contiene due tabelle (causale e movimenti)





    Il codice:

    import pymysql.cursors
    
    # Connessione
    connection = pymysql.connect(host='localhost',
                                 user='root',
                                 password='123',
                                 db='cassa',
                                 charset='utf8mb4',
                                 cursorclass=pymysql.cursors.DictCursor)
    # Inserimento dati e memorizzazione variabili
    datam = input("Data Movimento: ")
    causale = input("Inserire 1 per Entrata e 2 per Uscita :")
    descr = input("Descrizione movimento: ")
    importo = input("Importo: ")
    
    # Scrittura database
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO 'movimenti' ('DataMovimento', 'Causale', 'Descrizione', 'Importo') VALUES('" + datam + "', '" + causale + "', '" + descr + "', '" + importo + "')"
            cursor.execute(sql)
            connection.commit()
    
        with connection.cursor() as cursor:
            sql1 = "SELECT `DataMovimento`, `Causale`, 'Descrizione', 'Importo', 'Saldo' FROM `movimenti`"
            cursor.execute(sql1)
            result = cursor.fetchall()
            print(result)
    finally:
        connection.close()
    Grazie