У меня есть flask -sqlalchemy приложение
- Для разработки и производства я хочу использовать
mysql
- Для тестирования я хочу использовать
sqlite
.
В файле models.py у меня есть следующий класс:
....
from flask_sqlalchemy import SQLAlchemy
....
db = SQLAlchemy()
....
class Post(db.Model):
__tablename__ = 'posts'
__table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'mysql_collate': 'utf8_general_ci'}
id = db.Column(db.INTEGER, primary_key=True)
title = db.Column(db.Text, nullable=False)
body = db.Column(db.Text, nullable=False)
creation_date = db.Column(db.DATETIME, server_default=db.text("CURRENT_TIMESTAMP"))
update_date = db.Column(db.DATETIME, server_default=db.text('CURRENT_TIMESTAMP ON UPDATE CURRENT_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
Он жалуется на «ON UPDATE CURRENT_TIMESTAMP» в поле update_date. Я попытался удалить эту часть из models.py
, и тесты работали нормально, так что это должно быть проблемой.
Есть ли способ продолжать использовать sqlite для тестирования и избежать подобных проблем?