I'm trying to create an in-memory database using
db = sqlite3.connect(":memory:")
cur = db.cursor()
data = True
args = list(args)
args = args.replace("%s", "?").replace(" update "," `update` ")
args = tuple(args)
arg = args.split().lower()
if arg in ["update", "insert", "delete", "create"]: db.commit()
except Exception as why:
data = False
execute_db("create table name(name text)")
execute_db("insert into name values('Hello')")
no such table: name
db = sqlite3.connect("sqlite3.db")
You create a new connection each time you call the function. Each connection call produces a new in-memory database.
Create the connection outside of the function, and pass it into the function, or create a shared memory connection:
db = sqlite3.connect("file::memory:?cache=shared")
However, the database will be erased when the last connection is deleted from memory; in your case that'll be each time the function ends.
Rather than explicitly call
db.commit(), just use the database connection as a context manager:
try: with db: cur = db.cursor() # massage `args` as needed cur.execute(*args) return True except Exception as why: return False
The transaction is automatically committed if there was no exception, rolled back otherwise. Note that it is safe to commit a query that only reads data.