def find_by_person_id(self, person_key: int):
        """Auslesen aller Lerngruppen-Objekte der gegebenen Person ID

        :param person_key: Person ID
        :return: Sammlung aller Lerngruppen-Objekte, der gegebenen Person ID
        """
        result = []
        cursor = self._cnx.cursor()
        cursor.execute(
            "SELECT L.id, L.erstellungszeitpunkt, L.gruppenname, L.profil_id, L.konversation_id "
            "FROM lerngruppen AS L LEFT OUTER JOIN gruppen_teilnahmen AS R "
            "ON R.gruppen_id=L.id "
            "WHERE R.person_id={}".format(person_key)
        )
        tuples = cursor.fetchall()

        for (
            id,
            erstellungszeitpunkt,
            gruppenname,
            profil_id,
            konversation_id,
        ) in tuples:
            lerngruppe = Lerngruppe()
            lerngruppe.set_id(id)
            lerngruppe.set_erstellungszeitpunkt(erstellungszeitpunkt)
            lerngruppe.set_gruppenname(gruppenname)
            lerngruppe.set_profil_id(profil_id)
            lerngruppe.set_konversation_id(konversation_id)
            result.append(lerngruppe)

        self._cnx.commit()
        cursor.close()

        return result  # Rückgabe der Sammlung aller Lerngruppe-Objekte
    def find_by_key(self, key: int):
        """Auslesen einer Lerngruppe mit vorgegebener Lerngruppen ID

        :param key: Lerngruppen ID
        :return: Sammlung aller Lerngruppen-Objekte
        """

        result = None
        cursor = self._cnx.cursor()
        command = (
            "SELECT id, erstellungszeitpunkt, gruppenname, profil_id, konversation_id FROM "
            "lerngruppen WHERE id={}".format(key)
        )
        cursor.execute(command)
        tuples = cursor.fetchall()

        try:
            (id, erstellungszeitpunkt, gruppename, profil_id, konversation_id) = tuples[
                0
            ]
            lerngruppe = Lerngruppe()
            lerngruppe.set_id(id)
            lerngruppe.set_erstellungszeitpunkt(erstellungszeitpunkt)
            lerngruppe.set_gruppenname(gruppename)
            lerngruppe.set_profil_id(profil_id)
            lerngruppe.set_konversation_id(konversation_id)
            result = lerngruppe

        except IndexError:  # Wenn eine leere Sequenz zurückgegeben wird (tuples).
            result = None

        self._cnx.commit()
        cursor.close()

        return result  # Der Rückgabe der ID entsprechendes Lerngruppe-Objekt (None bei fehlender DB-Tupel)
    def find_all(self):
        """Auslesen aller Lerngruppe-Objekte

        :return: Sammlung aller Lerngruppen-Objekte
        """
        result = []
        cursor = self._cnx.cursor()
        cursor.execute("SELECT * from lerngruppen")  # SQL Statement
        tuples = cursor.fetchall()

        for (
            id,
            erstellungszeitpunkt,
            gruppenname,
            profil_id,
            konversation_id,
        ) in tuples:
            lerngruppe = Lerngruppe()
            lerngruppe.set_id(id)
            lerngruppe.set_erstellungszeitpunkt(erstellungszeitpunkt)
            lerngruppe.set_gruppenname(gruppenname)
            lerngruppe.set_profil_id(profil_id)
            lerngruppe.set_konversation_id(konversation_id)
            result.append(lerngruppe)

        self._cnx.commit()
        cursor.close()

        return result  # Rückgabe der Sammlung aller Lerngruppe-Objekte
    def insert(self, lerngruppe: Lerngruppe):
        """Einfügen eines Lerngruppe-Objekts in die Datenbank

        Der Primärschlüssel wird dabei überprüft und ggf. berechtigt.

        :param lerngruppe: Das zu speichernde Lerngruppen-Objekt
        :return: Das bereits übergebene Lerngruppen-Objekt, jedoch mit ggf, korrigierter ID.
        """
        cursor = self._cnx.cursor()
        cursor.execute("SELECT MAX(id) AS maxid FROM lerngruppen")
        tuples = cursor.fetchall()

        for maxid in tuples:
            if maxid[0] is not None:
                lerngruppe.set_id(maxid[0] + 1)
            else:
                lerngruppe.set_id(1)

        command = (
            "INSERT INTO lerngruppen (id, erstellungszeitpunkt, gruppenname, profil_id, konversation_id) "
            "VALUES (%s,%s,%s,%s,%s)"
        )
        data = (
            lerngruppe.get_id(),
            lerngruppe.get_erstellungszeitpunkt(),
            lerngruppe.get_gruppenname(),
            lerngruppe.get_profil_id(),
            lerngruppe.get_konversation_id(),
        )
        cursor.execute(command, data)

        self._cnx.commit()
        cursor.close()

        return lerngruppe  # Rückgabe des bereits übergebenen Objektes, ggf. mit korrigierter ID
    def find_by_konversation_id(self, konversation_key: int):
        """Auslesen aller Lerngruppen-Objekte der gegebenen Konversation ID

        :param konversation_key: Konversation ID
        :return: Sammlung aller Lerngruppen-Objekte, der gegebenen Konversation ID
        """
        result = []
        cursor = self._cnx.cursor()
        cursor.execute(
            "SELECT id, erstellungszeitpunkt, gruppenname, profil_id, konversation_id FROM "
            "lerngruppen WHERE konversation_id={}".format(konversation_key)
        )
        tuples = cursor.fetchall()

        for (
            id,
            erstellungszeitpunkt,
            gruppenname,
            profil_id,
            konversation_id,
        ) in tuples:
            lerngruppe = Lerngruppe()
            lerngruppe.set_id(id)
            lerngruppe.set_erstellungszeitpunkt(erstellungszeitpunkt)
            lerngruppe.set_gruppenname(gruppenname)
            lerngruppe.set_profil_id(profil_id)
            lerngruppe.set_konversation_id(konversation_id)
            result.append(lerngruppe)

        self._cnx.commit()
        cursor.close()

        return result  # Rückgabe der Sammlung aller Lerngruppe-Objekte