Sqlite3 python位于:内存:BD未移除(删除)

z8dt9xmd  于 2022-12-19  发布在  SQLite
关注(0)|答案(1)|浏览(200)

我有这个代码创建内存数据库:

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后,使用它-关闭(退出)我的应用程序-?

niwlg2el

niwlg2el1#

使用:memory:代替file:cachedb?mode=memory&cache=shared。共享缓存是一个过时的特性,SQLite官方不鼓励使用。它的存在只是为了完全向后兼容。
要使用真实的的内存DB,请将连接URI更改为:

NewDbconn = sqlite3.connect(":memory:")

SQLite3会在关闭连接后删除数据库,我已经在Python 3.9.1下测试过了。

相关问题