"('TBM.4892', 'Kommode', 1, '03.04.2011', 'Museumsbestyrer Olav N', '29.04.2012', 'Museumsbestyrer Olav Nilsen', 'Museumsbestyrer Olav Nilsen', 'M1.R2.P1.H1', '')\n"
]
}
],
"outputs": [],
"source": [
"\n",
"\n",
...
...
@@ -131,7 +121,7 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
...
...
%% Cell type:markdown id: tags:
### MySQL database
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=f"SELECT count(reg_no) as reg_no_count FROM {table_name} WHERE reg_no='{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'):
sql=f"UPDATE objects SET giver='{giver_val}',in_date='{innlemmet_dato_val}',category_id='{kategori_id}',comment='{kommentar_val}',received_by='{mottatt_av_val}',name='{navn_val}',placement='{plassering_val}',reg_by='{registrert_av_val}',reg_date='{registrerings_dato_val}' WHERE reg_no='{reg_no}'"
cursor.execute(sql)
else:
sql=f"INSERT INTO objects (giver,in_date,category_id,comment,received_by,name,placement,reg_by,reg_date,reg_no) VALUES('{giver_val}','{innlemmet_dato_val}','{kategori_id}','{kommentar_val}','{mottatt_av_val}','{navn_val}','{plassering_val}','{registrert_av_val}','{registrerings_dato_val}','{reg_no}')"