Skip to content
Snippets Groups Projects
Commit 6c325129 authored by Majid Rouhani's avatar Majid Rouhani
Browse files

upd

parent 7b70172b
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### MySQL database ### MySQL database
Man kan koble opp mot forskjellige databaser i Python: Man kan koble opp mot forskjellige databaser i Python:
- GadFly - GadFly
- mSQL - mSQL
- **MySQL** - **MySQL**
- PostgreSQL - PostgreSQL
- Microsoft SQL Server 2000 - Microsoft SQL Server 2000
- Informix - Informix
- Interbase - Interbase
- Oracle - Oracle
- Sybase - Sybase
- -
Eller bruke SqlLite3 Eller bruke SqlLite3
- Egen database modul for Python - Egen database modul for Python
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
# Viser hvordan vi kobler oss mot MySQL og leser/oppdaterer data. # Viser hvordan vi kobler oss mot MySQL og leser/oppdaterer data.
# Må installere PyMySQL først: pip install pymysql # Må installere PyMySQL først: pip install pymysql
import pymysql import pymysql
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
For å logge oss inn på databasen, må vi ha en konto på database-serveren. For å logge oss inn på databasen, må vi ha en konto på database-serveren.
Følgende informasjon må vi ha: Følgende informasjon må vi ha:
- host: navn på database-server - host: navn på database-server
- user: brukernavn for å koble oss til serveren - user: brukernavn for å koble oss til serveren
- password: passord for å koble oss til serveren - password: passord for å koble oss til serveren
- database: database seed (en database server kan inneholde mange database instanser) - 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. 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: %% Cell type:code id: tags:
``` python ``` python
# importer funksjonen getpass fra modulen getpass. # importer funksjonen getpass fra modulen getpass.
# Vi bruker getpass for å lese passord fra bruker (slik at det ikke vises i klartekst) # Vi bruker getpass for å lese passord fra bruker (slik at det ikke vises i klartekst)
from getpass import getpass from getpass import getpass
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
foo = None
bar = 2
# check whether foo is none or not
if foo is None:
foo = 20
print (foo)
```
%% Output
20
%% Cell type:code id: tags:
``` python
# Keep db connection
global db_connection
db_connection = None
# Definer variabler for oppkoblingsparameteret
my_host = "mysql.stud.iie.ntnu.no" my_host = "mysql.stud.iie.ntnu.no"
my_user = "rouhani" # Skriv inn brukernavnet ditt her my_user = "rouhani" # Skriv inn brukernavnet ditt her
my_password = getpass() my_password = getpass()
my_database = "rouhani" my_database = "rouhani"
def get_db_connection():
if 'db_connection' in globals():
db_connection = pymysql.connect(host = my_host, user = my_user, password = my_password, database = my_database)
return db_connection
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Koble opp mot databasen og les fra en tabell ### Koble opp mot databasen og les fra en tabell
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
with pymysql.connect(host = my_host, user = my_user, password = my_password, database = my_database) as my_db: with get_db_connection() as my_db:
my_cursor = my_db.cursor() my_cursor = my_db.cursor()
my_sql = "SELECT regnr,navn,regdato,regav FROM gjenstand" my_sql = "SELECT * FROM objects"
my_cursor.execute(my_sql) my_cursor.execute(my_sql)
for row in my_cursor: for row in my_cursor:
print(row) print(row)
``` ```
%% Output
('TBM.0832', 'Stol', 1, '12.04.2023', 'Hanne', '12.04.2023', 'Kristin', 'Olsen Giver', 'PL.A1.B2', 'Tester')
('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: %% Cell type:markdown id: tags:
### Koble opp mot databasen og oppdater rader i en tabell ### Koble opp mot databasen og oppdater rader i en tabell
%% Cell type:code id: tags:
``` python
#Sjekk om regnr existerer i databasen
def reg_no_exist(reg_no,table_name):
"""
Sjekk om regnnr existerer allerede i basen
:param regnr: type string
:return: boolean
"""
db = get_db_connection()
if not db:
sys.exit(0)
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
for row in cursor:
reg_no_count= row[0]
db.close()
if reg_no_count==0:
return False
else:
return True
#Lagrer gjenstand i basen
def save_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!
#****************************************
with get_db_connection() as my_db:
my_db.autocommit(True)
cursor = my_db.cursor()
if reg_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",
(giver_val,innlemmet_dato_val,kategori_id,kommentar_val,mottatt_av_val,navn_val,plassering_val,registrert_av_val,registrerings_dato_val,reg_no))
else:
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)",
(giver_val,innlemmet_dato_val,kategori_id,kommentar_val,mottatt_av_val,navn_val,plassering_val,registrert_av_val,registrerings_dato_val,reg_no))
save_object_db('Olsen Giver','12.04.2023', 1, 'Tester', 'Kristin', 'Stol', 'PL.A1.B2','Hanne','12.04.2023','TBM.0832')
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
### Koble opp mot databasen og fjern rader fra en tabell ### Koble opp mot databasen og fjern rader fra en tabell
......
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture4/lab/lab-4.md>Lab-4</a></blockquote> <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture4/lab/lab-4.md>Lab-4</a></blockquote>
</details> </details>
</details> </details>
<details><summary style="font-size:200%;cursor: pointer;">&emsp;Leksjon 5: Filbehandling, unntakshåndtering</summary> <details><summary style="font-size:200%;cursor: pointer;">&emsp;Leksjon 5: Filbehandling, unntakshåndtering, programmering mot databaser</summary>
<details><summary style="font-size:200%;cursor: pointer;">&emsp;&emsp;Introduksjon (slides)</summary> <details><summary style="font-size:200%;cursor: pointer;">&emsp;&emsp;Introduksjon (slides)</summary>
<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture5/notes/slides/lecture-5.pdf>Introduksjon</a></blockquote> <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">&emsp;&emsp;&emsp;<a target="_blank" href=lecture5/notes/slides/lecture-5.pdf>Introduksjon</a></blockquote>
</details> </details>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment