mcdaniels hat geschrieben:
Nun heißt es, dass die cursor.execute() Methode als 2ten Parameter eine Sequenz erwartet. Mit dem kann ich im Moment nichts anfangen.
Da stolpert man in der Doku ja fast schon drüber
Sequence Types
Eine Liste gehört demzufolge dazu.
Aber... wieso zum Geier iterierst Du über diese Liste? Du willst doch gerade die Liste "am Stück" als Parameter übergeben. Wie kommst Du also auf diese Idee?
Das Binden an die beiden Namen ist auch unnötig, wenn Du diese einfach nur in einen Container packst:
Code: Alles auswählen
name = raw_input('Name: ')
comment = raw_input('Kommentar: ')
data.append(name)
data.append(comment)
# besser:
data.append(raw_input('Name: '))
data.append(raw_input('Kommentar: '))
Du kannst Dir generell merken, dass man sich das Binden an einen Namen sparen kann, wenn man diesen nicht, oder nur genau einmal, verwendet. Ausnahmen sind hier Ausdrücke, die sonst zu lange werden und man durch das Trennen von Aufrufen ein wenig mehr Übersicht bekommt.
Wobei ich es hier umständlich finde, hier eine Liste zu generieren. Ich würde die Sequenz (und dann auch effizienter als Tupel!) erst on-the-fly im `execute` erstellen:
Code: Alles auswählen
my_cursor.execute('INSERT INTO guestbook VALUES (?, ?)', (name, comment))
Generell solltest Du darüber nachdenken, ob diese API, wie Du sie bisher hast, wirklich so flexibel ist! Du koppelst im Moment die Art und Weise der Dateneingabe an das Anlegen eines neuen Datensatzes - das würde ich trennen! Baue eine eigenständige Funktion `add_entry` o.ä. und erledige da nur das Speichern in die DB. Eine Benutzer-Eingabe-Funktion erstellst Du dann separat. Damit kannst Du auch auch anderen Wegen Einträge hinzufügen, etwa zum Testen o.ä. Später kommen Deine Daten dann ja wohl auch aus einem Formular - dann brauchst Du die Funktion zum Speichern nicht noch einmal umbauen, sondern kannst die so lassen, wie sie ist
`my_db_connection` und `my_cursor` lassen "schlimmes" erahnen; wieso sind das zwei globale Variablen? Wieso übergibst Du diese nicht als Parameter?