Wie kann ich erstellen Sie eine in-memory-Datenbank mit sqlite?
Ich versuche zu schaffen, eine in-memory-Datenbank mit sqlite3
in Python.
Erstellte ich eine Funktion zum erstellen einer db-Datenbank-Datei und Informationen zu speichern, und das funktioniert 100%.
Aber versuchen, eine Verbindung mit :memory:
ich konfrontiert haben einige Probleme.
Was ich Tue, ist:
import sqlite3
def execute_db(*args):
db = sqlite3.connect(":memory:")
cur = db.cursor()
data = True
try:
args = list(args)
args[0] = args[0].replace("%s", "?").replace(" update "," `update` ")
args = tuple(args)
cur.execute(*args)
arg = args[0].split()[0].lower()
if arg in ["update", "insert", "delete", "create"]: db.commit()
except Exception as why:
print why
data = False
db.rollback()
db.commit()
db.close()
return data
-
name erstellen Tabelle
execute_db("create table name(name text)")
welche zurückgegeben
True
-
legen Sie einige Informationen zu dieser Tabelle
execute_db("insert into name values('Hello')")
welche zurückgegeben
no such table: name False
Warum funktioniert das nicht? Es funktioniert, wenn ich eine Datei verwenden:
db = sqlite3.connect("sqlite3.db")
- Warum die Doppel -
db.commit()
bei der änderung von Daten? - Ohh, mein schlechtes thank u.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine neue Verbindung jedes mal, wenn Sie die Funktion aufrufen. Jede Verbindung Aufruf ergibt neue in-memory-Datenbank.
Erstellen der Verbindung außerhalb der Funktion, und übergeben Sie in der Funktion oder erstellen Sie eine shared memory-Verbindung:
Jedoch, die Datenbank wird gelöscht, wenn die Letzte Verbindung aus dem Speicher gelöscht wird; in Ihrem Fall, die werden jedes mal, wenn die Funktion endet.
Anstatt explizit aufrufen
db.commit()
, benutzen Sie einfach die Datenbank-Verbindung als Kontext-manager:Wird die Transaktion automatisch bestätigt, wenn es keine Ausnahme, Rollback, sonst. Beachten Sie, dass es sicher ist zu verpflichten, eine Abfrage, die nur Daten liest.