コード例 #1
0
ファイル: dbaccess.py プロジェクト: mritter-tgm/Wahlanalyse
 def __init__(self, database, username, password, wahltermin):
     self.connector = MySQLDBConnector(database, username, password)
     self.wahltermin = wahltermin
コード例 #2
0
ファイル: dbaccess.py プロジェクト: mritter-tgm/Wahlanalyse
class DBAccess:
    def __init__(self, database, username, password, wahltermin):
        self.connector = MySQLDBConnector(database, username, password)
        self.wahltermin = wahltermin

    def write_from_csv_list(self, datalist):

        session = self.connector.get_session()

        # delete previous data
        session.execute("DELETE FROM Stimmabgabe")
        session.execute("DELETE FROM Sprengel")
        session.execute("DELETE FROM Wahl")

        Wahl = self.connector.get_class("Wahl")
        wahl = Wahl(termin=self.wahltermin, mandate=100)
        session.add(wahl)

        Sprengel = self.connector.get_class("Sprengel")
        Stimmabgabe = self.connector.get_class("Stimmabgabe")

        parties = []
        for key in datalist[0].keys():
            if key not in ["SPR", "BZ", "WBER", "ABG.", "UNG.", "T", "WV", "WK"]:
                parties.append(key)

        for line in datalist:
            sprengel = Sprengel(sprengelnr=int(line["SPR"]),
                                bezirknr=int(line["BZ"]),
                                termin=wahl.termin,
                                wahlberechtigte=int(line["WBER"]),
                                abgegebene=int(line["ABG."]),
                                ungueltige=int(line["UNG."]),
                                )
            session.add(sprengel)
            for party in parties:
                stimmabgabe = Stimmabgabe(sprengelnr=int(line["SPR"]),
                                          bezirknr=int(line["BZ"]),
                                          termin=wahl.termin,
                                          abkuerzung=party,
                                          anzahl=int(line[party])
                                          )
                session.add(stimmabgabe)

        session.commit()

    def load_into_csv_list(self):
        session = self.connector.get_session()

        query = "SELECT Wahlkreis.wahlkreisnr, Bezirk.bezirknr, Sprengel.sprengelnr, Sprengel.wahlberechtigte, " \
                "Sprengel.abgegebene, Sprengel.ungueltige, Stimmabgabe.abkuerzung, Stimmabgabe.anzahl " \
                "FROM Wahlkreis " \
                "INNER JOIN Bezirk ON Wahlkreis.wahlkreisnr = Bezirk.wahlkreisnr " \
                "INNER JOIN Sprengel ON Bezirk.bezirknr = Sprengel.bezirknr " \
                "AND Sprengel.termin = '" + self.wahltermin + "' " \
                                                              "INNER JOIN Stimmabgabe ON Stimmabgabe.termin = '" + self.wahltermin + "' " \
                                                                                                                                     "AND Stimmabgabe.Bezirknr = Bezirk.bezirknr " \
                                                                                                                                     "AND Stimmabgabe.sprengelnr = Sprengel.sprengelnr;"
        result = session.execute(query).fetchall()

        header = OrderedSet(["WK", "BZ", "SPR", "WBER", "ABG.", "UNG."])
        datalist = []
        line = {}
        first_party = None
        for i in range(0, len(result)):
            current_party = result[i]["abkuerzung"]
            if first_party is None or current_party == first_party:
                if line:
                    datalist.append(line)
                line = {}
                first_party = current_party
                line["WK"] = result[i]["wahlkreisnr"]
                line["BZ"] = result[i]["bezirknr"]
                line["SPR"] = result[i]["sprengelnr"]
                line["WBER"] = result[i]["wahlberechtigte"]
                line["ABG."] = result[i]["abgegebene"]
                line["UNG."] = result[i]["ungueltige"]
            line[current_party] = result[i]["anzahl"]
            header.add(current_party)

        return datalist, list(header)

    def create_results(self):

        termin = self.wahltermin
        zeitpunkt = datetime.now().time().strftime("%H:%M:%S")

        connection = self.connector.get_raw_connection()
        cursor = connection.cursor()
        cursor.callproc("erzeugeHochrechnung", [termin,zeitpunkt])
        cursor.close()
        connection.commit()

        session = self.connector.get_session()
        session.commit()
        query = "SELECT * FROM HRErgebnis WHERE termin = '" + termin + "' AND zeitpunkt = '" + zeitpunkt + "'"
        result = session.execute(query).fetchall()

        line = {}
        header = []
        datalist = []
        for i in range(0, len(result)):
            line[result[i]["abkuerzung"]] = result[i]["prozent"]
            header.append(result[i]["abkuerzung"])
        datalist.append(line)

        return datalist, header