diff --git a/lectures/lecture5/notes/codes/databaser.ipynb b/lectures/lecture5/notes/codes/databaser.ipynb index 18777e74c10d972c42b0f0ec6a2a62571b8c098a..b574d44c0c37f9c897dd33fe9cc77d587ea3bdf5 100644 --- a/lectures/lecture5/notes/codes/databaser.ipynb +++ b/lectures/lecture5/notes/codes/databaser.ipynb @@ -26,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -102,6 +102,7 @@ "output_type": "stream", "text": [ "('TBM.0832', 'Stol', 1, '12.04.2023', 'Hanne', '12.04.2023', 'Kristin', 'Olsen Giver', 'PL.A1.B2', 'Tester')\n", + "('TBM.0832-N', 'Stol', 1, '12.04.2023', 'Hanne', '12.04.2023', 'Kristin', 'Olsen Giver', 'PL.A1.B2', 'Tester')\n", "('TBM.4892', 'Kommode', 1, '03.04.2011', 'Museumsbestyrer Olav N', '29.04.2012', 'Museumsbestyrer Olav Nilsen', 'Museumsbestyrer Olav Nilsen', 'M1.R2.P1.H1', '')\n" ] } @@ -130,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -144,7 +145,7 @@ " with get_db_connection() as db:\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", + " sql = f\"SELECT count(reg_no) as reg_no_count FROM {table_name} WHERE reg_no='{reg_no}'\"\n", " cursor.execute(sql)\n", "\n", " reg_no_count = 0\n", @@ -194,13 +195,13 @@ "\n", " my_db.autocommit(True)\n", " cursor = my_db.cursor()\n", - "\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", - " (giver_val,innlemmet_dato_val,kategori_id,kommentar_val,mottatt_av_val,navn_val,plassering_val,registrert_av_val,registrerings_dato_val,reg_no))\n", + " 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}'\"\n", + " cursor.execute(sql)\n", " else:\n", - " 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)\",\n", - " (giver_val,innlemmet_dato_val,kategori_id,kommentar_val,mottatt_av_val,navn_val,plassering_val,registrert_av_val,registrerings_dato_val,reg_no))\n", + " 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}')\"\n", + " cursor.execute(sql)\n", "\n", "#Oppdater eksisterende rad\n", "save_object_db('Olsen Giver','12.04.2023', 1, 'Tester', 'Kristin', 'Stol', 'PL.A1.B2','Hanne','12.04.2023','TBM.0832')\n", @@ -220,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -248,9 +249,9 @@ " db.autocommit(True)\n", "\n", " cursor = db.cursor()\n", - " cursor.execute(\"DELETE from properties where reg_no='\" + reg_no+\"'\")\n", - " cursor.execute(\"DELETE from provenances where reg_no='\" + reg_no+\"'\")\n", - " cursor.execute(\"DELETE from objects where reg_no='\" + reg_no+\"'\")\n", + " cursor.execute(f\"DELETE from properties where reg_no='{reg_no}'\")\n", + " cursor.execute(f\"DELETE from provenances where reg_no='{reg_no}'\")\n", + " cursor.execute(f\"DELETE from objects where reg_no='{reg_no}'\")\n", "\n", "\n", "delete_object('TBM.0832-N')" diff --git a/lectures/lecture5/notes/slides/lecture-5.md b/lectures/lecture5/notes/slides/lecture-5.md index 430cc864ee889f16f08a0070af6e80284e639516..856c417f02e2756352f9637a7c58b45c8e019047 100644 --- a/lectures/lecture5/notes/slides/lecture-5.md +++ b/lectures/lecture5/notes/slides/lecture-5.md @@ -10,14 +10,125 @@ 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 --- +# Filbehandling +Vi kan +* lagre data på fil +* lese data fra fil + +Når du åpner filen må du spesifisere hvordan du skal bruke filen. +Måten dette gjøres på er som inn-parameter i `open()`-funksjonen, noen eksempler er: + +- **'r'** - for lesing av filen (default) +- **'w'** - for skriving til filen +- **'a'** - for å legge til data (**a**ppend) til den eksisterende filen + +--- + +- For å åpne en fil i Python kan vi skrive: `f = open('filename', <Bruksmåte>)`. +<Bruksmåte> er enten `'r'`, `'w'` eller `'a'` avhengig av hva hvordan filen skal brukes. +- For å lese data fra en fil kan vi bruke: `innhold = f.read()` +- For å legge til data til en fil kan vi skrive: `f.write(data)` +- Filer lukkes på følgende måte: `f.close()` + +--- +# Lesing fra fil + +```python +f = open('example_file1.txt','r') #r spesifiserer at man skal lese fra en fil +innhold = f.read() +print(innhold) +f.close() +``` +--- +# En bedre måte å lese fra fil + +```python +with open('example_file1.txt','r') as f + innhold = f.read() + print(innhold) +``` +--- +# Skriving til fil + +```python +f = open('example_file1.txt','w') #w spesifiserer at man skal skrive til en fil (write) +f.write('En hatefull ytring') +f.close() +``` +--- +# En bedre måte å skrive til fil + +```python +with open('example_file1.txt','w') as f + f.write('En hatefull ytring') +``` + +--- +# Databaser + +1. Installer database-pakken for den aktuelle basen (pymysql) +2. En database må eksistere på en database server og du må ha fått tilgang +3. I Python, må du først opprette en kobling mot databasen +4. Deretter leser/oppdaterer du data + +--- +# Opprett kobling mot databasen + +```python +# Database connection object +global db_connection +db_connection = None + +my_host = "mysql.stud.iie.ntnu.no" +my_user = "rouhani" # Skriv inn brukernavnet ditt her +my_password = getpass() +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 +``` + +--- +# Lese data fra databasen +```python + +with get_db_connection() as my_db: + my_cursor = my_db.cursor() + + my_sql = "SELECT * FROM objects" + my_cursor.execute(my_sql) + + for row in my_cursor: + print(row) + +``` +--- +# Legge nye rader med data i databasen ```python -... + + cursor.execute(f"INSERT INTO objects (giver,...) VALUES({giver}...)") ``` +--- +# Oppdatere data i databasen +```python + +``` + +--- + +# Slette data fra databasen +```python + +``` diff --git a/lectures/lectures.json b/lectures/lectures.json index daf50c9b025178923dca80eb99a36207bd881e81..769de4313b0f09cf266cc7a0af917e7ca8f7c0a9 100644 --- a/lectures/lectures.json +++ b/lectures/lectures.json @@ -60,13 +60,7 @@ { "Leksjon 5: Filbehandling, unntakshåndtering, programmering mot databaser": [ {"Introduksjon (slides)": {"Introduksjon":"lecture5/notes/slides/lecture-5.pdf"}} - ,{ - "Filbehandling": [ - {"Lesing fra fil":""}, - {"Skriving til fil":""} - ] - } - ,{"Unntakshåndtering":""} + ,{"Filbehandling": {"Generelt om filbehandling":"lecture5/notes/codes/generelt_om_filbehandling.ipynb"}} ,{"Programmering mot databaser":{"Lesing og skriving til database": "lecture5/notes/codes/databaser.ipynb"}} ,{"Lab 5": {"Lab-5":"lecture5/lab/lab-5.md"}} ] diff --git a/lectures/lectures.md b/lectures/lectures.md index 6175fdd88068a737c24ccb1b3e47ce875ea68905..7629a472df394e48891ab67a6337bb1380642efb 100644 --- a/lectures/lectures.md +++ b/lectures/lectures.md @@ -95,15 +95,7 @@ <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   <a target="_blank" href=lecture5/notes/slides/lecture-5.pdf>Introduksjon</a></blockquote> </details> <details><summary style="font-size:200%;cursor: pointer;">  Filbehandling</summary> -<details><summary style="font-size:200%;cursor: pointer;">   Lesing fra fil</summary> -<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">    </blockquote> -</details> -<details><summary style="font-size:200%;cursor: pointer;">   Skriving til fil</summary> -<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">    </blockquote> -</details> -</details> -<details><summary style="font-size:200%;cursor: pointer;">  Unntakshåndtering</summary> -<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   </blockquote> +<blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   <a target="_blank" href=lecture5/notes/codes/generelt_om_filbehandling.ipynb>Generelt om filbehandling</a></blockquote> </details> <details><summary style="font-size:200%;cursor: pointer;">  Programmering mot databaser</summary> <blockquote style="font-size:200%;cursor: pointer;padding: 10px;">   <a target="_blank" href=lecture5/notes/codes/databaser.ipynb>Lesing og skriving til database</a></blockquote>