我想用存储器(“:记忆:”)一个SQLite数据库在Web应用程序我的测试。我使用为测试nosetests,和webpy作为骨架。

我要填充数据库的建立()函数,然后运行了所有的考试。我的问题是webpy关闭所有的每个请求后开放数据库连接,和SQLite的:内存:DB只持续,直到关闭连接,所以才有了第一个测试实际上是正确运行和所有其它的失败

我的选择是要么运行备份DB磁盘上的测试中,或在每个单独的测试开始重新创建整个DB在存储器中。

你知道我怎么能防止webpy从每个请求后关闭数据库连接? 你能想到的任何其他方式获得的在内存中的SQLite数据库已经持续了超过一个请求使用webpy?

有帮助吗?

解决方案

也许你可以运行存储在磁盘上一个数据库的测试,但使用 RAM磁盘。在Windows中,您可以在这里一些指令一>)。在Linux中,我相信你想设置 tmpfs的

RAM磁盘将起到完全像硬盘,但会从内存中完全运行,这样你会失去一些加载文件的开销/从硬盘。

其他提示

未测试:

class NoCloseDB(web.db.SqliteDB):
  def _unload_context(self):
    pass # this keeps the _ctx.db attribute alive
web.db.register_database('sqlite',NoCloseDB) # overrides the previous registration

请注意,如果你在一个只使用一个操作系统进程的方式运行web.py才能做到这一点。如果请求跨多个进程出动,每个人仍然会得到自己的数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top