我试图用flask和unittest实现数据库模拟。我看到的例子使用Flask-SQLAlchemy的db.create_all()
和db.drop_all()
方法以及unittest的setUp()
和tearDown()
方法来准备测试夹具。然而,这些都是SQLite专用的。查看文档,db.create_all()
只创建表而不是数据库。同样,使用db.drop_all()
只删除表。我假设SQLite的行为不同,因为它是一个嵌入式的、基于文件的RDBMS。
所以对于我的问题,当数据库还没有创建时,我如何用Flask实现数据库模拟(在我的情况下是MariaDB数据库)?我看到Flask-SQLAlchemy提供了db.engine
引擎,但当我检查引擎时,它指定了我的SQLALCHEMY_DATABASE_URI
.
>>> db.engine
Engine(mysql+pymysql://admin@localhost/test_db?charset=utf8mb4)
字符串
下面是Miguel Grinberg的《Flask Web Development》一书中的例子。
import unittest
from flask import current_app
from app import create_app, db
class BasicsTestCase(unittest.TestCase):
def setUp(self):
self.app = create_app('testing')
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all() # raise pymysql.err.OperationalError "Unknown database 'test_db'"
def tearDown(self):
db.session.remove()
db.drop_all()
self.app_context.pop()
型# raise pymysql.err.OperationalError "Unknown database 'test_db'"
个
我确实认为我需要使用可用的db.engine
,但我不确定如何使用它来实现mocking。
1条答案
按热度按时间jv4diomz1#
在运行
setUp
之前,似乎需要创建用户/数据库:连接到数据库并使用SQL创建数据库和用户:
字符串