Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当sqlite中缺少一些特性时,如何使用相同的模型进行测试和开发/生产_Python_Sqlite_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python 当sqlite中缺少一些特性时,如何使用相同的模型进行测试和开发/生产

Python 当sqlite中缺少一些特性时,如何使用相同的模型进行测试和开发/生产,python,sqlite,sqlalchemy,flask-sqlalchemy,Python,Sqlite,Sqlalchemy,Flask Sqlalchemy,我有炼金术申请 对于开发和生产,我想使用mysql 对于测试,我想使用sqlite 在项目的models.py中,我有以下类: 。。。。 从flask_sqlalchemy导入sqlalchemy .... db=SQLAlchemy() .... 班级职位(db.Model): __tablename_uu='posts' __表_args_uuu={'mysql_引擎':'InnoDB','mysql_字符集':'utf8','mysql_collate':'utf8_general_c

我有炼金术申请

  • 对于开发和生产,我想使用
    mysql
  • 对于测试,我想使用
    sqlite
在项目的models.py中,我有以下类:

。。。。
从flask_sqlalchemy导入sqlalchemy
....
db=SQLAlchemy()
....
班级职位(db.Model):
__tablename_uu='posts'
__表_args_uuu={'mysql_引擎':'InnoDB','mysql_字符集':'utf8','mysql_collate':'utf8_general_ci'}
id=db.Column(db.INTEGER,主键=True)
title=db.Column(db.Text,null=False)
body=db.Column(db.Text,nullable=False)
创建日期=db.Column(db.DATETIME,服务器默认值=db.text(“当前时间戳”))
update\u date=db.Column(db.DATETIME,server\u default=db.text('update CURRENT\u TIMESTAMP上的CURRENT\u TIMESTAMP'))
....
这个模型在开发中(连接到mysql db时)运行得非常好,但是,当我尝试运行测试(连接到mysqlite db时)时,我得到了以下异常

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "ON": syntax error [SQL: '\nCREATE TABLE posts (\n\tid INTEGER NOT NULL, \n\ttitle TEXT NOT NULL, \n\tbody TEXT NOT NULL,\n\tcreation_date DATETIME DEFAULT CURRENT_TIMESTAMP, \n\tupdate_date DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, \n)'] (Background on this error at: http://sqlalche.me/e/e3q8)\n
它正在抱怨更新日期字段中的“更新当前时间戳”。我已经尝试从
models.py
中删除此部分,并且测试工作正常,所以这一定是问题所在


有没有办法继续使用sqlite进行测试并避免此类问题?

通常在将为sqlite编写的代码迁移到另一个数据库(如mysql或postgres)时会发现类似的问题。试图修复此错误意味着为了测试,使您的代码与SQLite兼容。如果你的dev/prod env是mysql,我的目标是针对mysql进行测试。要么将你的代码库限制为一个公共的功能子集,要么使用实际的目标DB进行测试,要么模拟整个DB层。