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]