Ausführen sqlite3 "dot" - Befehle aus Python oder registrieren Sortierung in command line utility
Meine sqlite3-Datenbank enthält ein "collate" column-constraint. Ich habe es in das schema für die Tabelle, um zu verhindern, dass versehentlich zu vernachlässigen, um die notwendige Sortierung. Allerdings bedeutet dies, wenn ausgeführt sqlite3
von der Befehlszeile aus, und nicht von meinem Python-code, wird die Sortierung auf die in das schema nicht vorhanden ist, und ich bin nicht in der Lage zu verwenden, dot-Befehle.
sqlite> .import data.txt table_name
Error: no such collation sequence: my_collation
Darüber hinaus erstellen Sie die Verbindung von Python, und das hinzufügen der Sortierung erforderlich ist, läuft dieses problem:
connWithCollation.execute(".import data.txt table_name")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near ".": syntax error
Den execute
Funktion scheint es nicht zu geben wollen das sqlite3-dot-Befehl durch.
Wie kann ich sqlite3 ausführen dot-Befehlen, wenn notwendig, Sortierung Funktionen sind nicht vorhanden? Alternativ, wie kann ich die sqlite3 ausführen dot-Kommandos von Python?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Laden Sie neue zusammentrag-Sequenzen und-Funktionen, die mit load_extension() integrierte SQLite-Funktion oder .laden Befehl im Befehlszeilen-shell für SQLite. Offensichtlich, Erweiterungen shold werden in C geschrieben.
Und kann man das nicht nennen dot-Kommandos von python, da die Punkt-Befehle sind spezifisch für die Windows-Eingabeaufforderung tool.
Können Sie call-dot-Kommandos von Python mit dem subprocess-Modul, das im Grunde ruft eine shell. Wenn Sie brauchen, um mehrere dot-Befehlen, übergeben Sie diese als separate shell-Argumente mit einem Semikolon zu trennen, wird nicht funktionieren.
Den
.import
Befehl in der sqlite-shell ist ein builtin-Kommando. Es verarbeitet von der shell-Programm, nicht die SQL-engine, so dass Sie nicht durchführen kann, es wie eine SQL-Anweisung.Lesen code für SQLite ist shell.c, es scheint, dass
.import
ist einfach eine Schleife, Lesen Zeilen aus der Datendatei, die Teilung auf den separator, und übergeben Sie die Felder als parameter-Werte zu einer vorbereitetenINSERT
- Anweisung. So sollten Sie in der Lage sein zu imitieren das Verhalten von.import
mit Python code leicht.Getestet habe ich die folgenden mit Python 2.6:
Den dot-Kommandos sind nur verfügbar, zu den
sqlite3
ausführbare Datei. Sie haben, um Sie zu ersetzen mit der entsprechenden Kombination von Python-code-und DB-API-Aufrufe, um zu imitieren Ihr Verhalten.Die APSW Python-wrapper für SQLite enthält ein shell-kompatibel mit SQLite ein. Sie können auch verlängern Sie, und fügen Sie weitere Befehle Ihrer Wahl, extra-Ausgabe-Modi etc. (Offenlegung: ich bin der APSW Autor.)