使用Flask_SQLAlchemy和MariaDB进行数据库模拟,无法使用create_all和drop_all方法创建或删除数据库

rqqzpn5f  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(91)

我试图用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。

jv4diomz

jv4diomz1#

在运行setUp之前,似乎需要创建用户/数据库:
连接到数据库并使用SQL创建数据库和用户:

CREATE DATABASE IF NOT EXISTS test_db;
CREATE USER IF NOT EXISTS admin@localhost IDENTIFIED BY 'secretpassword';
GRANT ALL ON test_db.* to admin@localhost;

字符串

相关问题