在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'

那么,使用布尔列表最好的解决方法是什么?我已经尝试使用一个字符串,每个字符代表TrueFalse,但我发现这非常不令人满意......

有更好的方法吗?

编辑:我已经找到了这个blog post。但是,对于这么一点似乎过于复杂(尽管我对这个问题的了解不多可能是错的)。

答案

好吧,我承认ARRAY类型对数据库来说似乎相当不错。但是,我发现这不是普通SQL规范中的标准类型......事实上,似乎只有PostGreSQL确实拥有它。

所以,我最终没有在我的数据库模型中使用ARRAY类型...这可能是有史以来最糟糕的解决方法,但是,更符合SQL标准。

以上是关于在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Celery 任务中使用 Flask-SQLAlchemy

安卓应用版本升级时sqlit数据库升级

Sqlit--学习教程(命令)

使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化

在 Flask-sqlalchemy 和 Postgresql 中使用 JSON 类型

Python flask-sqlalchemy初级解析