Kestrel
Profilo di
Nome | Kestrel |
---|---|
Indirizzo email | n/a |
Messaggi | 12 |
-
- 2018-10-09 16:44:30
- 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.
Magari aprendo un altro post.
Grazie
-
- 2018-10-09 11:24:04
- 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
-
- 2018-10-04 15:55:34
- 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
-
- 2018-10-04 15:36:49
- 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 ---
-
- 2018-10-03 22:32:04
- 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!
-
- 2018-10-03 17:19:41
- 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
-
- 2018-10-03 12:00:12
- 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 ---
-
- 2018-10-02 10:01:06
- 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
-
- 2018-10-01 18:46:26
- 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 ---
-
- 2018-10-01 18:42:47
- 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