def load(self, date): Wahl = self.accessor.clazz('wahl') # check wheter there is an election for this date if self.session.query(exists().where(Wahl.termin == date)).scalar(): Wahlkreis = self.accessor.clazz('wahlkreis') Sprengel = self.accessor.clazz('sprengel') Parteistimmen = self.accessor.clazz('parteistimmen') Bezirk = self.accessor.clazz('bezirk') """ Index: Label 0: wahlkreis 1: bezirk 2: sprengel 3: berechtigte 4: abgegebene 5: ungueltige 6: partei 7: stimmanzahl """ # just define the query so one can check if it is correct query = self.session.query(Wahlkreis.wknr.label('wahlkreis'), Bezirk.bnr.label('bezirk'), Sprengel.snr.label('sprengel'), Sprengel.berechtigt.label('berechtigt'), Sprengel.abgegeben.label('abgegebene'), Sprengel.ungueltig.label('ungueltig'), Parteistimmen.pbez.label('partei'), Parteistimmen.stimmanzahl.label('stimmanzahl')). \ select_from(Wahlkreis). \ join(Bezirk, Bezirk.wknr == Wahlkreis.wknr). \ join(Sprengel, and_(Sprengel.bnr == Bezirk.bnr, Sprengel.termin == date)). \ join(Parteistimmen, and_(Parteistimmen.termin == date, Parteistimmen.bnr == Bezirk.bnr, Parteistimmen.snr == Sprengel.snr)) # convert the data using the executed query data, header = WahlAnalyseDataConvertAlgorithm.convert_raw(query.all()) return data, header else: Notification.make("Table Error", "No Data for this Date") return [], []
def save(self, date, data): if len(data) > 0: Wahl = self.accessor.clazz('wahl') Sprengel = self.accessor.clazz('sprengel') Parteistimmen = self.accessor.clazz('parteistimmen') # make sure there is only one election per day wahl_at_date = self.session.query(Wahl).filter_by(termin=date).first() if wahl_at_date: self.session.delete(wahl_at_date) # TODO d self.session.commit() # create the election with the given date wahl = Wahl(termin=date, mandate=100) self.session.add(wahl) # all fields besides these are parties """ T = Hierarchietyp (1 = Wien-Gesamt, 2 = Wahlkreis, 3 = Bezirk, 4 = Sprengel) WV = Wahlkreis Wien-Gesamt (09 bei Bundeswahl, 01 bei Regionalwahl) WK = Wahlkreis SPR = Sprengelnummer WBER = Wahlberechtigte ABG. = Abgegebene Stimmen UNG. = Ungültige Stimmen """ reserved = ['SPR', 'BZ', 'WBER', 'ABG.', 'UNG.', 'T', 'WV', 'WK'] # save the party names to an extra list parties = [] for key in data[0].keys(): if key not in reserved: parties.append(key) for row in data: sprengel = Sprengel( snr=int(row['SPR']), bnr=int(row['BZ']), termin=date, berechtigt=int(row['WBER']), abgegeben=int(row['ABG.']), ungueltig=int(row['UNG.']) ) self.session.add(sprengel) for party in parties: parteistimmen = Parteistimmen( pbez=party, snr=int(row['SPR']), bnr=int(row['BZ']), termin=date, stimmanzahl=int(row[party]) ) self.session.add(parteistimmen) try: self.session.commit() except Exception as e: Notification.make("Database Error", "Could not commit: " + str(e)) else: Notification.make("Table Error", "Empty Data List")