首页 > 解决方案 > 使用 sqlalchemy 将 sqlite 数据库复制到内存中以测试烧瓶应用程序

问题描述

我想在测试我的烧瓶应用程序期间使用我的开发数据库(它包含我在测试期间无法获得的 oauth 令牌)。我希望能够将基于磁盘的开发数据库复制到内存并将其用于测试,这样它就不会改变开发数据库。

所以这是我到目前为止所做的:

在我的应用程序中选择测试时使用:

SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"

现在我希望将我现有的数据库复制到这个基于内存的临时数据库中。我已经搜索了其他答案,但最接近的是:

# open existing db
old_db = sqlite3.connect('app.db')
# get the connection to the in memory db
connection = db.get_engine().raw_connection()
# copy old_db into memory
old_db.backup(connection)

但这会导致

backup() argument 1 must be sqlite3.Connection, not _ConnectionFairy

有没有办法使用这样的连接来实现我想要的目标?

谢谢

马丁

标签: sqliteflasksqlalchemy

解决方案


如果其他人来到这里,这就是我错过的 - raw_connection() 对象需要通过以下方式转换为 sqlite 连接:

connection = db.get_engine().raw_connection().connection

这是完整的代码:

# open existing db
old_db = sqlite3.connect('app.db')
# get the connection to the in memory db
conn = db.get_engine().raw_connection().connection
# copy old_db into memory
old_db.backup(conn)

马丁


推荐阅读