在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY相关的知识,希望对你有一定的参考价值。
我正在使用Flask使用Flask-SQLAlchemy作为ORM编写Web服务器。为简单起见,我想使用SQLite3并将服务器的状态存储在一个简单的文件中。
我的数据模型需要处理布尔值向量(在DB创建时已知的固定大小),但似乎SQLAlchemy ARRAY
类型并未完全实现SQLite3后端。
以下是Python交互式shell中的一个简单运行,它将演示此问题:
>>> from flask import Flask
>>> from flask_sqlalchemy import SQLAlchemy
>>> app = Flask(__name__)
>>> app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
>>> db = SQLAlchemy(app)
>>> class Sample(db.Model):
... id = db.Column(db.Integer, primary_key=True)
... task_done = db.Column(db.ARRAY(db.Boolean, dimensions=10))
...
>>> db.create_all()
Traceback (most recent call last):
File "/lib/python3/sqlalchemy/sql/visitors.py", line 77, in _compiler_dispatch
meth = getter(visitor)
AttributeError: 'SQLiteTypeCompiler' object has no attribute 'visit_ARRAY'
那么,使用布尔列表最好的解决方法是什么?我已经尝试使用一个字符串,每个字符代表True
或False
,但我发现这非常不令人满意......
有更好的方法吗?
编辑:我已经找到了这个blog post。但是,对于这么一点似乎过于复杂(尽管我对这个问题的了解不多可能是错的)。
答案
好吧,我承认ARRAY
类型对数据库来说似乎相当不错。但是,我发现这不是普通SQL规范中的标准类型......事实上,似乎只有PostGreSQL确实拥有它。
所以,我最终没有在我的数据库模型中使用ARRAY
类型...这可能是有史以来最糟糕的解决方法,但是,更符合SQL标准。
以上是关于在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Celery 任务中使用 Flask-SQLAlchemy
使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化