PDA

Visualizza la versione completa : [PYTHON] Leggere dati da un database MySQL


ile987
13-07-2007, 00:16
Salve a tutti!!
Vi scrivo il codice che devo utlizzare...

#---------Apertura della connessione----------------------------------
import MySQLdb
conn = MySQLdb.connect(host="localhost",user="root",passwd="informatica",db="esercizio")
cursore = conn.cursor()
cont=1
cursore.execute('USE esercizio;')
#-----------Creo una nuova tabella dove metto i risultati--------------
cursore.execute('DROP TABLE IF EXISTS `tmp`;')
cursore.execute('CREATE TABLE `tmp` (stores_id INT, ricavo FLOAT)')

risultato=""
while cont<=24:
cursore.execute('SELECT sum(store_sales*unit_sales) FROM sales_fact_1998 s where store_id=%d and promotion_id="0" ;'%(cont))
risultato = cursore.fetchall()
cursore.execute("INSERT INTO tmp (stores_id, ricavo) VALUES ('"+cont+"','"+risultato+"')")
cursore.execute('commit')
print risultato #codice temporaneo poi va cancellato!!!!
cont=cont+1

Non indentato!
Esegue tutte le query sql tranne quella dell'insert into x la tabella viene creata correttamente. Infatti mi da errore appunto su quella riga di codice...io ho pensato che x inserire in una tabella devo avere x forza delle stringhe e nn degli int o dei float ma nn so come fare a convertire le due variabili perch l'errore : cannot concatenated 'str' and 'int' object oppure cannot concatenated 'str' and 'tupla' object.

Poi altro quesito...come faccio a leggere dal database e poi scrivere in un file di testo...La farte delle scrivere ci sono ma in quella del leggere nn so dove mettere le mani...
Grazie a tutti!

billiejoex
14-07-2007, 02:24
- Il codice non indentato e di conseguenza non si pu capire (usa i tag 'code').
- Parli di un errore ma non fornisci il messaggio di Traceback.
- (peggio di tutte) Parli di una cosa che conosci solo tu (non hai spiegato il problema).

Da quel poco che ho capito in questo casino:


io ho pensato che x inserire in una tabella devo avere x forza delle stringhe e nn degli int o dei float ma nn so come fare a convertire le due variabili
Sforzandomi fino a perdere i capelli ho capito che tu hai una variabile 'stringa' del tipo:



>>> s = '1'


...che sei obbligato a tenere tale (tipo stringa, appunto) ma che vorresti utilizzare per poter effettuare operazioni matematiche su di essa, del tipo:



>>> s + 5
6


In tal caso ti basta convertire temporaneamente 's' da stringa a intero tramite il builtin int:



>>> int(s) + 5
6


l'errore : cannot concatenated 'str' and 'int' object oppure cannot concatenated 'str' and 'tupla' object.
Manca il contesto, il codice e anche il messaggio di Traceback ma dai due errori che hai citato deduco che stai mischiando interi con stringhe e tuple:



>>> 5 + '5'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 5 + (5,)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'tuple

Questo ovviamente non possibile in quanto Python (per fortuna) adotta lo strong-typing. Rifletti su questo:



>>> type(5)
<type 'int'>
>>> type('5')
<type 'str'>
>>> type((5,))
<type 'tuple'>


...e considera che tutti questi tipi possono essere convertiti in interi tramite il builtin che ho detto sopra.

Loading