" sql = \"SELECT count(reg_no) as reg_no_count FROM {0} WHERE reg_no='{1}'\".format(table_name,reg_no)\n",
" sql = \"SELECT count(reg_no) as reg_no_count FROM {0} WHERE reg_no='{1}'\".format(table_name,reg_no)\n",
...
@@ -178,8 +175,6 @@
...
@@ -178,8 +175,6 @@
" for row in cursor:\n",
" for row in cursor:\n",
" reg_no_count= row[0]\n",
" reg_no_count= row[0]\n",
"\n",
"\n",
" db.close()\n",
"\n",
" if reg_no_count==0:\n",
" if reg_no_count==0:\n",
" return False\n",
" return False\n",
" else:\n",
" else:\n",
...
...
%% 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
importpymysql
importpymysql
```
```
%% 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)
fromgetpassimportgetpass
fromgetpassimportgetpass
```
```
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
foo=None
foo=None
bar=2
bar=2
# check whether foo is none or not
# check whether foo is none or not
iffooisNone:
iffooisNone:
foo=20
foo=20
print (foo)
print (foo)
```
```
%% Output
%% Output
20
20
%% Cell type:code id: tags:
%% Cell type:code id: tags:
``` python
``` python
# Keep db connection
# Keep db connection
globaldb_connection
globaldb_connection
db_connection=None
db_connection=None
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
('TBM.4892', 'Kommode', 1, '03.04.2011', 'Museumsbestyrer Olav N', '29.04.2012', 'Museumsbestyrer Olav Nilsen', 'Museumsbestyrer Olav Nilsen', 'M1.R2.P1.H1', '')
('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:
%% Cell type:code id: tags:
``` python
``` python
#Sjekk om regnr existerer i databasen
#Sjekk om regnr existerer i databasen
defreg_no_exist(reg_no,table_name):
defreg_no_exist(reg_no,table_name):
"""
"""
Sjekk om regnnr existerer allerede i basen
Sjekk om regnnr existerer allerede i basen
:param regnr: type string
:param regnr: type string
:return: boolean
:return: boolean
"""
"""
db=get_db_connection()
withget_db_connection()asdb:
ifnotdb:
cursor=db.cursor()
sys.exit(0)
sql="SELECT count(reg_no) as reg_no_count FROM {0} WHERE reg_no='{1}'".format(table_name,reg_no)
cursor.execute(sql)
cursor=db.cursor()
reg_no_count=0
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]
forrowincursor:
ifreg_no_count==0:
reg_no_count=row[0]
returnFalse
else:
db.close()
returnTrue
ifreg_no_count==0:
returnFalse
else:
returnTrue
#Lagrer gjenstand i basen
#Lagrer gjenstand i basen
defsave_object_db(giver_val,
defsave_object_db(giver_val,
innlemmet_dato_val,
innlemmet_dato_val,
kategori_id,
kategori_id,
kommentar_val,
kommentar_val,
mottatt_av_val,
mottatt_av_val,
navn_val,
navn_val,
plassering_val,
plassering_val,
registrert_av_val,
registrert_av_val,
registrerings_dato_val,
registrerings_dato_val,
reg_no):
reg_no):
"""
"""
Lagre gjenstand info i databasen.
Lagre gjenstand info i databasen.
Dersom den finnes allerede, blir gjenstand oppdatert
Dersom den finnes allerede, blir gjenstand oppdatert
Dersom den ikke finnes, blir den opprettet.
Dersom den ikke finnes, blir den opprettet.
:param giver_val: string
:param giver_val: string
:param innlemmet_dato_val: string
:param innlemmet_dato_val: string
:param kategori_id: int
:param kategori_id: int
:param kommentar_val: string
:param kommentar_val: string
:param mottatt_av_val: string
:param mottatt_av_val: string
:param navn_val: string
:param navn_val: string
:param plassering_val: string
:param plassering_val: string
:param registrert_av_val: string
:param registrert_av_val: string
:param registrerings_dato_val: string
:param registrerings_dato_val: string
:param regnr: string
:param regnr: string
:return:
:return:
"""
"""
#****************************************
#****************************************
# Oppgave 4.1
# Oppgave 4.1
# Fullfør innholdet i denne funksjonen!
# Fullfør innholdet i denne funksjonen!
#****************************************
#****************************************
withget_db_connection()asmy_db:
withget_db_connection()asmy_db:
my_db.autocommit(True)
my_db.autocommit(True)
cursor=my_db.cursor()
cursor=my_db.cursor()
ifreg_no_exist(reg_no,'objects'):
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("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)",
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)",