Python
>Databaser
Python og MySQL
MySQL
|
Python bibliotek for MySQL
|
Kjøring av SQL-statements i Python - prinsipp:
|
Eksempel1
|
Eksempel 2
MySQL
- Last fra MySQL [1] , og installer denne der du ønsker.
- Last evt. også ned "MySQL Workbench" fra samme sted. Her finner du verktøy for å administrere og inspisere databaser.
- Databasen må startes
Python bibliotek for MySQL
- Last ned MySQLdb via MySQL [1] eller fra sourceforge.net/projects/mysql-python. Sjekk versjoner og kompatibilitet
Kjøring av SQL-statements i Python - prinsipp:
Python MySQL
Når vi programmerer bruker vi MySQLdb-objekter for å koble oss opp, hente data osv. Dette blir dermed integrert i Python.
Opplegget blir i korthet:
- Koble opp databasen (lag et databaseoppkoblingsobjekt som peker til den maskinen og databasen du ønsker å jobbe med)
- Deklarer et resultatobjekt som kan eksekvere spørringer og hvor resultatet av spørringen mot databasen kan legges
- Bruk databasen
- Legg spørringen i en tekststreng
- Kjør spørringen
- Bruk resultatet
- Koble ned databasen
Eksempel1
Python 2.0 (#8, Oct 16 2000, 17:27:58) [MSC 32 bit (Intel)] on win32 Type "copyright", "credits" or "license" for more information. IDLE 0.6 -- press F1 for help def MySQLdemo(): # importer bibliotek, koble opp databasen # og sett opp en markør (resultatobjekt) # host, bruker, passord, database # som host kan du skrive ip, db er databasenavnet i MySQL import MySQLdb #forutsetter først at basen ligger lokalt, uten passord mindatabase=MySQLdb.connect(host='localhost',user='',passwd='',db='test') mintabell=mindatabase.cursor() # Legger inn en ny kunde. Gir ingen melding tilbake hvis alt er ok sql_setning="insert into kunde values (46,'Hansen & Co')" mintabell.execute(sql_setning) #definer og eksekver en sporring. # NB: Hele SQL (også tabelloppretting) kan brukes. sql_setning = 'select * from kunde' mintabell.execute(sql_setning) # Lister ut de aktuelle, alt. 1, med feltnavn for kundenr,kundenavn in mintabell.fetchall(): print 'Kunde --: ',kundenr,kundenavn print "ferdig1" # Lister ut de aktuelle, alt. 2, med feltnr for radene in mintabell.fetchall(): print 'Kunde --: ',radene[0],radene[1] print "ferdig2" mindatabase.close() # eksempel som viser oppkobling mot ekstern database: # mindatabase =MySQLdb.connect # (host='pc16-81.hiof.no',user='iad10002',passwd='javaxerxgoy', db='skatt')
Resultatet av de to utlistings avsnittene ovenfor:
>>> MySQLdemo() Kunde --> 1 Ole Kunde --> 2 Hans Kunde --> 46 Hansen & Co ferdig1 Kunde --> 1 Ole Kunde --> 2 Hans Kunde --> 46 Hansen & Co ferdig2 >>>
Eksempel 2
Vi skriver en liten modul som henter og lister data om viner.
import MySQLdb """ Use MySQL Read a database and build a HTML-file Database table: create table wines( vin_id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100), catalog CHAR(10), type CHAR(10), country VARCHAR(20), dice TINYINT, volume INT, price CHAR(10), description TEXT ); """ #---------------------------------- # connect and execute a sql-request def connectAndExecute(sql): myBase=None try: myBase=MySQLdb.connect(host='frigg.hiof.no', user='student', passwd='student', db='vin') myTab=myBase.cursor() myTab.execute(sql) myBase.commit() myBase.close() return myTab.fetchall() except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) if myBase!=None: myBase.close() return None if __name__=="__main__": SQL_SELECT_WINES="""SELECT name,dice FROM wines WHERE country='%s' AND type='%s';""" results=connectAndExecute(SQL_SELECT_WINES%('Portugal','white')) if results!=None: print str(len(results))+' hvite viner fra Portugal' print '------------------------' for ix in range(0,len(results)): record=results[ix] print str(record[1])+' : '+record[0]