Øvelse 9. Klasser, objekter og sql-tabeller insert code here



Relaterede dokumenter
Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute.

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

Views etc. Databaser

Begrænsninger i SQL. Databaser, efterår Troels Andreasen

Fra ER-Diagram til Relationel model i 7 step

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

Database. lv/

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

The Design Diaries Project 3 2. Semester. Blog om designprincipper

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

MapBasic brugergruppe. Geografiske objekter. Peter Horsbøll Møller Senior Systems Engineer April 2013

Anne Randorff Højen

Introduktion til programmering

Databaseadgang fra Java

DOCUMENTATION FULLY DRESSED USE-CASE. 29. oktober 2012 [ TEMA PERSISTENS DOKUMENTATION] Use-case: Process Order

En Kort Introduktion til Oracle

Det er muligt at chekce følgende opg. i CodeJudge: og

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Introduktion til SQL queries

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

Lær Python - Dag 4, modul 1 Objektorienteret programmering

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Portal Registration. Check Junk Mail for activation . 1 Click the hyperlink to take you back to the portal to confirm your registration

Løsning af skyline-problemet

Excel som database i ASP via ADO

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved.

Barnets navn: Børnehave: Kommune: Barnets modersmål (kan være mere end et)

Eksempel på en database: studenter, kurser, eksamener

SQL Server 2016 Data Adgang

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

Data lagring. 2. iteration (implement backend)

Introduktion til programmering

User Manual for LTC IGNOU

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

3. semester, 2. projekt: Database

DB undervisning 01-01

(fig.1. Eksempel på en almindelig entity)

Skriftlig eksamen i kurset. Informationssystemer

ODS measured tagset til RTF er smart og kan tilpasses

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes.

Backup Applikation. Microsoft Dynamics C5 Version Sikkerhedskopiering

Opgave 1. Opret de 4 tabeller i FTSFrontend programmet. Indsæt mindst 3 forskellige tabelværdier i kunder, målerstatus, byer og regning..

Skriftlig eksamen i Databaser, Vinter 2001/2002. Pa opfordring har jeg udarbejdet mulige lsninger pa eksamensopgaverne, men

Hent filoplysninger fra billeder og filer

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

SQL for MySQL-begyndere

Klasser og Objekter i Python. Uge 11

Deltag i en quiz: Test din viden i SAS -programmering

1. Basal select med (stjerne)

Selection Udvælgelse. For at markere mere end en polygon, holdes Ctrl samtidig. Klik på næste polygon. Gentag for i alt 5 polygoner.

Database programmerings tips

The server successfully processed the request and is not returning any content.

Modul 2 Database projekt Multimediedesign 3. semester Gruppe 3 IRF/TUJE

Linear Programming ١ C H A P T E R 2

3. PROJEKT, 2 SEMESTER

Eksamen, DSDS, efterår 2007

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

EasyIQ Opdatering > 5.4.0

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Tagwall med Php & MySQL

Transkript:

Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til at spille hovedrollen i systemudvikling til foråret. Når man indlæser data fra en database til sit program, skal man finde en hensigtsmæssig datastruktur hvori man kan opbevare data. I dette kursus skal I bruge objekter, for det kommer til at spille hovedrollen i systemudvikling til foråret. Opgaven ligger i forlængelse af opgave 6 og 7 hvor I lærte at kommunikere mellem pyton og databasen. Denne opgave handler om hvordan man opbevarer de oplysninger man får tilbage og om hvordan man organiserer pyton-programmet på en velstruktureret måde. I denne opgave vil resultater af databasekald blive opbevaret i objekter. Den ligger også i forlængelse af opgave 5 fordi klassen SQL skal have en funktion, makehtmltable, der kan fremvise dens data som en html-tabel. Opgaven går ud på at gøre nedenstående modul færdige, dvs. indsætte kode alle de steder hvor der står insert code here. Nogle steder er angivet hvilket databasekald man skal benytte sig af. Modulet beskriver klasser hvis instanser kan bruges til at gemme sine data i. Modulets klasser er beskrevet i fig 1.

2 Fig. 1. Klasserne SQL og Persistent er abstrakte klasser, dvs. de er ikke beregnet til at man skal lave instanser af dem. SQL klassen indeholder to attributter: columnnames er en liste af navne på databasekolonner og values der er en liste af lister der repræsenterer rækker i tabel. Desuden indeholder den en funktion makehtmltable() der producerer en html-tabel af sine data. Det var den I lavede i øvelse 6. Da SQL er overklasse til alle andre klasser, vil disse nedarve columnnames, values og makehtmltable(). Persistent repræsenterer tabeller og tabellerrækker i databasen. Det er en betingelse at de har en primary key. Table repræsenterer en tabel og Row repræsenterer en række. Hvis Row genereres med en nøgle (barn = Row('Child','3112450091')), vil instansen indeholde data fra posten med den pågældende nøgle. Man kan så ændre data med put-metoden (barn.put('firstname','jeppe')), og senere gemme resultat ved hjælp af update-metoden (barn.update()). Man kan også slette rækken i databasen ved hjælp af delete (barn.delete()). Genereres Row uden nøgle, oprettes en tom instans som man kan fylde indhold på ved hjælp af put-metoden. I starten er values = ['', '', '', '', '', '', '', '', '', '', '', '']. Man kan også indsætte alle data på én gang ved hjælp af putallvalues(): valuelist = ['1111111111', 'Jeppe Boegh', 'Andersen', 'Thorsgade 20', '8410', 'dreng', '', '86379790', 'Baltica', '1111111112', '1111111113', '1111111114'] x.putallvalues(valuelist) Instansen kan så senere indsættes som en ny post i databasen ved hjælp af insertmetoden (barn.insert()).

Table indeholder ud over values (den liste af liste af tabelrækker som alle klasser indeholder) en liste rows der indeholder Row-objekter svarende til de rækker der forekommer i values. Temporary-klassen er beregnet til at gemme vilkårlige databaseudtræk. Den genereres med en liste af kolonnenavne og en SQL-ordre. Kolonnenavne skal svare til de kolonnenavne der nævnes efter SELECT i SQL-ordren. Altså f.eks.: SQLordre = '''SELECT Child.cpr, Child.firstname, Child.lastname FROM Child, Person WHERE Child.hasMother = Person.cpr AND Child.address = Person.address''' barn = Temporary(['cpr','firstname','lastname'],SQLordre) SQL-ordren finder cpr, fornavn og efternavn på alle børn der bor på moderens adresse. Resultatet er i dette tilfælde én person, [['1111111115', 'Stine', 'Jacobsen ']] Også her kan vi få lavet en html-tabel ved at skrive barn.makehtmltable() Det giver følgende tabel: 3 Nedenfor er den kode I skal færdiggøre. I kan downloade den fra hjemmesiden. Der hedder den OOogSql. Husk at lægge modulet database.py (som I downloadede i øvelse 6) i samme mappe, for OOogSql importerer database.py import database class SQL: '''Abstract class columnnames is a list of column names values is a list of lists representing rows in the database''' def init (self, columnnames, values): self.columnnames = columnnames self.values = values print 'Column names: '+str(self.columnnames) print 'Values: '+str(self.values) def makehtmltable(self): '''makes a html-table that displays the column names and the values''' tablewithheading = [] tablewithheading.append(self.columnnames) tablewithheading.extend(self.values) return maketable(tablewithheading) class Persistent(SQL): '''Abstract class''' def init (self, tablename, values): self.primarykey = database.getprimarykey(tablename) self.tablename = tablename columnnames = database.getcolumnnames(tablename) SQL. init (self, columnnames, values) print 'Table name: '+self.tablename print 'Primary key: ' + self.primarykey SQL.printContents(self) def getprimarykey(self): '''returns the primary key'''

4 class Table(Persistent): ''' This class represents a table Values contains a list of lists representing the rows in the table. Components contains corresponding instances of the Row class Instances are generated by Table(tablename)''' def init (self, tablename): values = database.findrecords(tablename,[]) valuelist = [] Persistent. init (self,tablename, values) #insert a list of Row-instances corresponding to the values rows =[] primarykey = self.primarykey i = self.columnnames.index(primarykey) for v in self.values: thekey = v[i] rows.append(row(tablename,thekey)) self.rows = rows def getrow(self,thekey): '''returns a row-instance whose primary key = thekey if none exists, returns None''' print 'Table name: '+self.tablename print 'Primary key: '+ self.primarykey print 'Values : \n' + str(self.values) print 'Components: ' for c in self.rows: c.printcontents() class Row(Persistent): ''' This class represents a row in a table. The data of the row is represented by a list containing one list: [[data, data, data, data]] If a key is provided, the row in the database with the key is read into the instance. If no key is provided, an instance with empty values is generated Instances are generated by Row(tablename) or Row(tablename,key)''' def init (self, tablename, key=''): Persistent. init (self,tablename, None) if key!= '': #insert the table row self.values = database.findrecords(tablename,[],{self.primarykey:key}) #insert an empty table row thelength = len(self.columnnames) self.values = ['']*thelength def put(self,attribute,value): ''' inserts value as the value of the attribute If the attribute does not exist, it prints attribute does not exist''' def putallvalues(self,valuelist): '''inserts valuelist as the value of the instance''' if len(valuelist) == len(self.columnnames): self.values = valuelist print 'length of valuelist is different from length of columnnames' def get(self,attribute): '''returns the value of attribute if it exists. Else return None''' def update(self): '''updates the database''' thekey = self.get(self.primarykey) if thekey!= '': updatelist = database.rowtodictionary(self.columnnames,self.values[0]) database.updaterecords(self.tablename, updatelist, {self.primarykey:thekey}) print 'cannot update because the key is missing' def insert(self): '''inserts the row as a new row in the database if the primary key exists. Else print "cannot insert because key is missing"''' def delete(self): '''deletes the row from the database if the primary key exists Else print "cannot delete because the key is missing"''' class Temporary(SQL):

5 '''Class representing an arbitrary selection from the database Instances are generated by Temporary(columnNames, sqlcommand) where columnnames is a list of column names''' def init (self, columnnames, sqlcommand): SQL. init (self, columnnames, database.querydb(sqlcommand)) def maketable(tablecontents): ''' Produces a html table. Input is a list of list [a1,a2,a3...] where ai is a list. Each ai is visualised as a row in the html-table. ''' #insert the function you made in exercise 6 here return htmltabel