"('TBM.4892', 'Kommode', 1, '03.04.2011', 'Museumsbestyrer Olav N', '29.04.2012', 'Museumsbestyrer Olav Nilsen', 'Museumsbestyrer Olav Nilsen', 'M1.R2.P1.H1', '')\n"
]
}
],
"source": [
"source": [
"\n",
"\n",
"\n",
"\n",
"with pymysql.connect(host = my_host, user = my_user, password = my_password, database = my_database) as my_db:\n",
"with get_db_connection() as my_db:\n",
" my_cursor = my_db.cursor()\n",
" my_cursor = my_db.cursor()\n",
"\n",
"\n",
" my_sql = \"SELECT regnr,navn,regdato,regav FROM gjenstand\"\n",
" my_sql = \"SELECT * FROM objects\"\n",
" my_cursor.execute(my_sql)\n",
" my_cursor.execute(my_sql)\n",
"\n",
"\n",
" for row in my_cursor:\n",
" for row in my_cursor:\n",
...
@@ -112,6 +151,89 @@
...
@@ -112,6 +151,89 @@
"### Koble opp mot databasen og oppdater rader i en tabell\n"
"### Koble opp mot databasen og oppdater rader i en tabell\n"
]
]
},
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"#Sjekk om regnr existerer i databasen\n",
"def reg_no_exist(reg_no,table_name):\n",
" \"\"\"\n",
" Sjekk om regnnr existerer allerede i basen\n",
" :param regnr: type string\n",
" :return: boolean\n",
" \"\"\"\n",
" db = get_db_connection()\n",
"\n",
" if not db:\n",
" sys.exit(0)\n",
"\n",
" cursor = db.cursor()\n",
" sql = \"SELECT count(reg_no) as reg_no_count FROM {0} WHERE reg_no='{1}'\".format(table_name,reg_no)\n",
" cursor.execute(sql)\n",
"\n",
" reg_no_count = 0\n",
"\n",
" for row in cursor:\n",
" reg_no_count= row[0]\n",
"\n",
" db.close()\n",
"\n",
" if reg_no_count==0:\n",
" return False\n",
" else:\n",
" return True\n",
"\n",
"#Lagrer gjenstand i basen\n",
"def save_object_db(giver_val,\n",
" innlemmet_dato_val,\n",
" kategori_id,\n",
" kommentar_val,\n",
" mottatt_av_val,\n",
" navn_val,\n",
" plassering_val,\n",
" registrert_av_val,\n",
" registrerings_dato_val,\n",
" reg_no):\n",
" \"\"\"\n",
" Lagre gjenstand info i databasen.\n",
" Dersom den finnes allerede, blir gjenstand oppdatert\n",
" Dersom den ikke finnes, blir den opprettet.\n",
" :param giver_val: string\n",
" :param innlemmet_dato_val: string\n",
" :param kategori_id: int\n",
" :param kommentar_val: string\n",
" :param mottatt_av_val: string\n",
" :param navn_val: string\n",
" :param plassering_val: string\n",
" :param registrert_av_val: string\n",
" :param registrerings_dato_val: string\n",
" :param regnr: string\n",
" :return:\n",
" \"\"\"\n",
"\n",
" #****************************************\n",
" # Oppgave 4.1\n",
" # Fullfør innholdet i denne funksjonen!\n",
" #****************************************\n",
"\n",
" with get_db_connection() as my_db:\n",
"\n",
" my_db.autocommit(True)\n",
" cursor = my_db.cursor()\n",
"\n",
" if reg_no_exist(reg_no,'objects'):\n",
" 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\",\n",
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
bar=2
# check whether foo is none or not
iffooisNone:
foo=20
print (foo)
```
%% Output
20
%% Cell type:code id: tags:
``` python
# Keep db connection
globaldb_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
('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
defreg_no_exist(reg_no,table_name):
"""
Sjekk om regnnr existerer allerede i basen
:param regnr: type string
:return: boolean
"""
db=get_db_connection()
ifnotdb:
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
forrowincursor:
reg_no_count=row[0]
db.close()
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)",