在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY

问题描述 投票:1回答:1

我正在使用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。但是,对于这么一点似乎过于复杂(尽管我对这个问题的了解不多可能是错的)。

python flask sqlite sqlalchemy
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.