【问题标题】:Emulating an ARRAY of Booleans while using SQLite3 in Flask-SQLAlchemy在 Flask-SQLAlchemy 中使用 SQLite3 时模拟布尔数组
【发布时间】:2018-03-01 18:42:50
【问题描述】:

我正在使用 Flask-SQLAlchemy 作为 ORM 编写一个带有 Flask 的 Web 服务器。为了简单起见,我想使用 SQLite3 并将服务器的状态存储在一个简单的文件中。

我的数据模型需要处理布尔向量(在创建数据库时已知的固定大小),但似乎 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】:

    好的,我承认ARRAY 类型对于数据库来说似乎非常好和明显。但是,我发现这不是普通 SQL 规范中的标准类型......确实,似乎只有 PostGreSQL 有它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多