Man kan koble opp mot forskjellige databaser i Python:
- GadFly
- mSQL
-**MySQL**
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
- …
Eller bruke SqlLite3
- Egen database modul for Python
%% Cell type:code id: tags:
``` python
# Viser hvordan vi kobler oss mot MySQL og leser/oppdaterer data.
# Må installere PyMySQL først: pip install pymysql
importpymysql
```
%% Cell type:markdown id: tags:
For å logge oss inn på databasen, må vi ha en konto på database-serveren.
Følgende informasjon må vi ha:
- host: navn på database-server
- user: brukernavn for å koble oss til serveren
- password: passord for å koble oss til serveren
- database: database seed (en database server kan inneholde mange database instanser)
Dersom vi ikke ønsker å "hardkode" passord (skrive det i programmet i klar tekst eller i en fil), kan vi bruke modulen **getPass** for å taste inn passordet når programmet starter.
%% Cell type:code id: tags:
``` python
# importer funksjonen getpass fra modulen getpass.
# Vi bruker getpass for å lese passord fra bruker (slik at det ikke vises i klartekst)
fromgetpassimportgetpass
```
%% Cell type:code id: tags:
``` python
# Database connection object
globaldb_connection
db_connection=None
my_host="mysql.stud.iie.ntnu.no"
my_user="rouhani"# Skriv inn brukernavnet ditt her
('TBM.4892', 'Kommode', 1, '03.04.2011', 'Museumsbestyrer Olav N', '29.04.2012', 'Museumsbestyrer Olav Nilsen', 'Museumsbestyrer Olav Nilsen', 'M1.R2.P1.H1', '')
%% Cell type:markdown id: tags:
### Koble opp mot databasen og oppdater rader i en tabell
%% Cell type:code id: tags:
``` python
#Sjekk om regnr existerer i databasen
defreg_no_exist(reg_no,table_name):
"""
Sjekk om regnnr existerer allerede i basen
:param regnr: type string
:return: boolean
"""
withget_db_connection()asdb:
cursor=db.cursor()
sql="SELECT count(reg_no) as reg_no_count FROM {0} WHERE reg_no='{1}'".format(table_name,reg_no)
cursor.execute(sql)
reg_no_count=0
forrowincursor:
reg_no_count=row[0]
ifreg_no_count==0:
returnFalse
else:
returnTrue
#Lagrer gjenstand i basen
defsave_object_db(giver_val,
innlemmet_dato_val,
kategori_id,
kommentar_val,
mottatt_av_val,
navn_val,
plassering_val,
registrert_av_val,
registrerings_dato_val,
reg_no):
"""
Lagre gjenstand info i databasen.
Dersom den finnes allerede, blir gjenstand oppdatert
Dersom den ikke finnes, blir den opprettet.
:param giver_val: string
:param innlemmet_dato_val: string
:param kategori_id: int
:param kommentar_val: string
:param mottatt_av_val: string
:param navn_val: string
:param plassering_val: string
:param registrert_av_val: string
:param registrerings_dato_val: string
:param regnr: string
:return:
"""
#****************************************
# Oppgave 4.1
# Fullfør innholdet i denne funksjonen!
#****************************************
withget_db_connection()asmy_db:
my_db.autocommit(True)
cursor=my_db.cursor()
ifreg_no_exist(reg_no,'objects'):
cursor.execute("UPDATE objects SET giver=%s,in_date=%s,category_id=%s,comment=%s,received_by=%s,name=%s,placement=%s,reg_by=%s,reg_date=%s WHERE reg_no=%s",
cursor.execute("INSERT INTO objects (giver,in_date,category_id,comment,received_by,name,placement,reg_by,reg_date,reg_no) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",