@Will: Das ist ziemlich sicher nicht der Code den Du tatsächlich geschrieben und laufen lassen hast. Den mal davon abgesehen das Zeile 16 ganz sicher zu einem SyntaxError schon beim kompilieren, also vor der eigentlichen Ausführung, führen wird, käme das Programm auch sonst gar nicht erst bis dort hin. Denn Zeile 12 führt zu einem `sqlite.OperationalError` weil auch das SQL ist nicht syntaktisch korrekt.
Den Dateimodus 'wr' gibt es nicht. Ich vermute mal stark was da passieren kann ist undefiniert. Aber etwas später wird die Datei ja noch einmal mit dem gültigen Modus 'w' erstellt. Sofern der Programmfluss tatsächlich bis dort hin kommt, muss die Datei danach auch existieren. Wenn natürlich auch leer, denn `values` ist ja leer.
Ob die Variante mit dem falschen Dateimodus ansonsten so Sinn machen würde, käme extrem darauf an was `values` denn dann am Ende mal enthält, aber es ist eher unwahrscheinlich. Insbesondere wenn der Name `row` korrekt verwendet ist.
Arbeite am besten mal das Tutorial in der Python-Dokumentation durch um ein Gefühl für die Kontrollstrukturen von Python und die grundlegenden Datentypen zu bekommen.
Dann sollten die Namen im Programm aussagekräftig sein, also eher nicht `conn` oder `c` sondern `connection` und `cursor`, damit man das besser lesen und verstehen kann. Ausserdem werden Namen von Variablen üblicherweise klein und mit Unterstrichen geschrieben, also `sqlite_path` statt `sqlitePath`. Das steht zum Beispiel im
Style Guide for Python Code.
Rückwärts gerichtete Schrägstriche haben in Zeichenkettenliteralen eine besondere Bedeutung. Das sieht man hier im Forum auch deutlich an der farbigen Syntaxhervorhebung das diese Zeichen mit dem jeweiligen Folgezeichen anders dargestellt werden als der Rest der Zeichenkette. Du hast Glück, dass keine Kombination dabei ist, die etwas anderes Bedeutet als Backslash gefolgt von dem nächsten Zeichen. Man sollte die entweder alle richtig ”escapen”, mit jeweils einem Backslash, ein ”rohes” Zeichenkettenliteral verwenden, oder normale Schrägstriche verwenden. Da kommen die Windows-APIs auch mit klar. Nur die Shell unter Windows mag das nicht, weil bei DOS der Schrägstrich für Kommandozeilen-Optionen verwendet wurde.
Wie schon gesagt: Teil das Problem in Teilprobleme auf die von Funktionen gelöst werden. Auf Modulebene gehören weder Variablen noch das Programm, da sollten nur Definitionen von Konstanten, Funktionen, und Klassen stehen. Dann kann man das Modul importieren, ohne dass das Programm ausgeführt wird, und die Funktionen einzeln Testen, manuell oder automatisiert, und auch einige andere Werkzeuge erwarten, das man Module importieren kann, ohne das etwas vom Programm ausgeführt wird (ausser den Definitionen).