我有这个代码创建内存数据库:
import sqlite3
def Creat_In_Memory_DB():
NewDbconn = sqlite3.connect('file:cachedb?mode=memory&cache=shared')
NewDbconn.execute('''CREATE TABLE TestTable (ID INT PRIMARY KEY , FirstCo TEXT , SecCol TEXT )''')
NewDbconn.execute('''INSERT INTO TestTable VALUES ("1","test1","test2")''')
NewDbconn.commit()
NewDbconn.close()
Creat_In_Memory_DB()
当我调用函数Creat_In_Memory_DB()时,一切正常,但当我关闭-退出-我的应用程序时,DB应从内存中删除(因为它是临时保留的),我的问题是;当我再次启动应用程序时,出现此错误:
OperationalError: table TestTable already exists
即使我把我的电脑关闭并重新启动它(刷新内存),我仍然有同样的错误它看起来像DB还没有删除我不知道为什么,我测试它使用这个代码(即使在我的电脑关闭并重新启动它刷新内存):
cursorM = NewDbconn.execute("SELECT * from TestTable ")
for s in cursorM :
print s[0] ,s[1] , s[2]
出局:
所以DB真的仍然存在,为什么会发生这种情况,以及我如何删除内存中的DB后,使用它-关闭(退出)我的应用程序-?
1条答案
按热度按时间niwlg2el1#
使用
:memory:
代替file:cachedb?mode=memory&cache=shared
。共享缓存是一个过时的特性,SQLite官方不鼓励使用。它的存在只是为了完全向后兼容。要使用真实的的内存DB,请将连接URI更改为:
SQLite3会在关闭连接后删除数据库,我已经在Python 3.9.1下测试过了。