コード例 #1
0
ファイル: database.py プロジェクト: sgeyer-tgm/WahlAnalyse
    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 [], []
コード例 #2
0
ファイル: database.py プロジェクト: sgeyer-tgm/WahlAnalyse
    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")