From 7b70172bac0c6894ca251d046a0a686e720fde3d Mon Sep 17 00:00:00 2001
From: majidrouhanintnu <42731301+majidrouhanintnu@users.noreply.github.com>
Date: Mon, 10 Apr 2023 11:08:51 +0200
Subject: [PATCH] upd

---
 lectures/lecture5/notes/codes/databaser.ipynb | 146 ++++++++++++++++++
 lectures/lecture5/notes/slides/lecture-5.md   |   2 +
 lectures/lectures.json                        |   2 +-
 3 files changed, 149 insertions(+), 1 deletion(-)
 create mode 100644 lectures/lecture5/notes/codes/databaser.ipynb

diff --git a/lectures/lecture5/notes/codes/databaser.ipynb b/lectures/lecture5/notes/codes/databaser.ipynb
new file mode 100644
index 0000000..57483a2
--- /dev/null
+++ b/lectures/lecture5/notes/codes/databaser.ipynb
@@ -0,0 +1,146 @@
+{
+ "cells": [
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### MySQL database\n",
+    "\n",
+    "Man kan koble opp mot forskjellige databaser i Python:\n",
+    "- GadFly\n",
+    "- mSQL\n",
+    "- **MySQL**\n",
+    "- PostgreSQL\n",
+    "- Microsoft SQL Server 2000\n",
+    "- Informix\n",
+    "- Interbase\n",
+    "- Oracle\n",
+    "- Sybase\n",
+    "- …\n",
+    "\n",
+    "Eller bruke SqlLite3 \n",
+    "- Egen database modul for Python\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Viser hvordan vi kobler oss mot MySQL og leser/oppdaterer data.\n",
+    "# Må installere PyMySQL først: pip install pymysql\n",
+    "import pymysql"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "For å logge oss inn på databasen, må vi ha en konto på database-serveren.\n",
+    "\n",
+    "Følgende informasjon må vi ha:\n",
+    "\n",
+    "- host: navn på database-server\n",
+    "- user: brukernavn for å koble oss til serveren\n",
+    "- password: passord for å koble oss til serveren\n",
+    "- database: database seed (en database server kan inneholde mange database instanser)\n",
+    "\n",
+    "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.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# importer funksjonen getpass fra modulen getpass.\n",
+    "# Vi bruker getpass for å lese passord fra bruker (slik at det ikke vises i klartekst)\n",
+    "from getpass import getpass"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "# Definer variabler for oppkoblingsparameteret\n",
+    "my_host = \"mysql.stud.iie.ntnu.no\"\n",
+    "my_user = \"rouhani\" # Skriv inn brukernavnet ditt her\n",
+    "my_password = getpass()\n",
+    "my_database = \"rouhani\""
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Koble opp mot databasen og les fra en tabell"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "\n",
+    "with pymysql.connect(host = my_host, user = my_user, password = my_password, database = my_database) as my_db:\n",
+    "    my_cursor = my_db.cursor()\n",
+    "\n",
+    "    my_sql = \"SELECT regnr,navn,regdato,regav FROM gjenstand\"\n",
+    "    my_cursor.execute(my_sql)\n",
+    "\n",
+    "    for row in my_cursor:\n",
+    "        print(row)\n",
+    "\n"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Koble opp mot databasen og oppdater rader i en tabell\n"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Koble opp mot databasen og fjern rader fra en tabell"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.2"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/lectures/lecture5/notes/slides/lecture-5.md b/lectures/lecture5/notes/slides/lecture-5.md
index 9ce55e5..430cc86 100644
--- a/lectures/lecture5/notes/slides/lecture-5.md
+++ b/lectures/lecture5/notes/slides/lecture-5.md
@@ -10,6 +10,8 @@ paginate: true
 **Læringsutbytte**
 
 * Lære å lese fra og skrive til fil
+* Lære om unntakshåndtering og kjøretidsfeil
+* Lære å koble seg mot MySql database
 
 ---
 
diff --git a/lectures/lectures.json b/lectures/lectures.json
index 9d1f8dd..cc89e12 100644
--- a/lectures/lectures.json
+++ b/lectures/lectures.json
@@ -58,7 +58,7 @@
             ]
         },
         {
-            "Leksjon 5: Filbehandling, unntakshåndtering": [
+            "Leksjon 5: Filbehandling, unntakshåndtering, programmering mot databaser": [
                 {"Introduksjon (slides)": {"Introduksjon":"lecture5/notes/slides/lecture-5.pdf"}}
                 ,{
                     "Filbehandling": [
-- 
GitLab