使用SQLite测试db的Flask SQLAlchemy MySQL应用程序?

时间:2018-03-19 11:35:24

标签: python mysql sqlite sqlalchemy

我一直在使用Flask应用程序,使用SQLAlchemy访问MySQL数据库。我终于开始考虑为此编写测试(我是测试的坚定信徒,但对于Flask和SQLA和Python来说是新手,所以推迟了这个),并且在设置我的结构时遇到了问题。

我的生产数据库没有使用任何不寻常的MySQL功能,而在其他语言/框架中,我已经能够使用内存中的SQLite数据库来设置测试框架。 (例如,我有一个使用DBIx::Class的Perl应用程序来运行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)

所以,即使我使用原始SQL,我也可以将TINYINT与SQLite或MySQL一起使用,它可以正常工作,这里,它来自mysql方言类。

我不想覆盖我的整个模型类,以便涵盖看似琐碎的事情。还有其他解决方案吗?我已经阅读了有关使用不同数据库进行测试和生产的内容,但尚未提及此问题。使用内存中的SQLite数据库进行测试会更容易,而不必为所有内容提供MySQL测试数据库。

0 个答案:

没有答案