Python 正在删除内存中的数据库文件: 背景和问题

Python 正在删除内存中的数据库文件: 背景和问题,python,python-3.x,sqlite,python-unittest,Python,Python 3.x,Sqlite,Python Unittest,我们在测试时使用:memory:存储数据库,并希望在每个测试用例运行之前删除它,以便我们从一开始就为每个测试用例创建一个空数据库。(如果我们将数据库存储在磁盘上,我们只需删除该文件) 我们的设置 我们正在使用Python的unittest模块 (Python版本:3.6) 这就是我们数据库创建的样子:db\u connection=sqlite3.connect(“:memory:”) 如何从内存中删除数据库?使用连接方法close()。它将关闭您与数据库的连接。如果数据库在内存中,您应该

我们在测试时使用
:memory:
存储数据库,并希望在每个测试用例运行之前删除它,以便我们从一开始就为每个测试用例创建一个空数据库。(如果我们将数据库存储在磁盘上,我们只需删除该文件)

我们的设置
  • 我们正在使用Python的
    unittest
    模块
  • (Python版本:3.6)
  • 这就是我们数据库创建的样子:
    db\u connection=sqlite3.connect(“:memory:”)


如何从内存中删除数据库?

使用连接方法
close()
。它将关闭您与数据库的连接。如果数据库在内存中,您应该无法重新连接到它

您可以简单地测试这一点:

import sqlite3
conn = sqlite3.connect(':memory:')

c = conn.cursor()
c.execute('CREATE TABLE test (col1 text, col2 text)')
c.execute("INSERT INTO test VALUES ('good', 'day')")
conn.commit()
conn.close()
之后,我们可以检查是否可以访问数据库

conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("SELECT * FROM test")
print(c.fetchall())
c、 执行(“从测试中选择*)

sqlite3.ERROR:没有这样的表:测试


这向我们表明,当您在内存中关闭数据库时,它会被销毁。

我确信在
setUp
中调用
self.db\u connection=sqlite3.connect(“:memory:”)
将确保每次测试都获得一个“新”db。然后在每次测试中使用
self.db\u连接
。谢谢,这对我很有用!在使用您的答案中的信息更新后的瞬间。(此函数从
tearDown
函数调用)。在第一部分正确之前,我们从不需要显式关闭数据库,因此可以使用
.close()
关闭内存中的数据库。但你证明这一点的方法是错误的。每次调用
sqlite3.connect(':memory:')
时,都会在内存中创建一个全新的数据库。因此,第二个
.connect(':memory:')
将不会访问与第一个
相同的内存。connect(':memory:')
,而不管您是编写
.close()
还是不使用它。见:或。