我一直在研究 Flask 应用程序,使用 SQLAlchemy 访问 MySQL 数据库。我终于开始考虑为此编写测试(我坚信测试,但我对 Flask、SQLA 和 Python 还不熟悉,所以推迟了这个),并且在设置我的结构时遇到了问题。
我的生产数据库没有使用任何不寻常的 MySQL 功能,在其他语言/框架中,我已经能够使用内存中的 SQLite 数据库设置测试框架。(例如,我有一个 Perl 应用程序DBIx::Class用于运行 SQL Server 数据库,但有一个基于 SQLite 构建的测试套件。)但是,使用 SQLAlchemy 我需要在我的模型中声明一些特定的 MySQL 内容,而我不是确定如何解决这个问题。特别是,我对一些列使用了 TINYINT 和 CHAR 类型,而且我似乎必须从 sqlalchemy.dialects.mysql 导入这些类型,因为这些不是 SQLA 中的通用类型。因此,我将有一个类声明,如:
class Item(db.Model):
...
size = db.Column(TINYINT, db.ForeignKey('size.size_id'), nullable=False)
Run Code Online (Sandbox Code Playgroud)
因此,即使我使用原始 SQL,我也可以将 TINYINT 与 SQLite 或 MySQL 一起使用,并且它可以正常工作,在这里,它来自 mysql 方言类。
我不想为了覆盖这样看似微不足道的事情而覆盖我的整个模型类。还有其他解决方案吗?我已经阅读了关于使用不同数据库进行测试和生产的所有内容,但是没有提到这个问题。使用内存中的 SQLite 数据库进行测试会容易得多,而不必拥有一个可用于所有内容的 MySQL 测试数据库。