В настоящее время я пытаюсь создать базу данных, в которой есть столбец для объекта JSON:
import sqlalchemy as sql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.types import JSON
# Creating the Base Object for the tables.
Base = declarative_base()
class Observations(Base):
# Declaring the tablename.
__tablename__='observations'
# Defining the PK column.
OBS_id=sql.Column(sql.Integer, primary_key=True)
# Defining a FK column to stabilishes the connection between this table
# and the ActiveRegion table.
ar_id=sql.Column(sql.Integer, sql.ForeignKey(ActiveRegion.AR_id))
# Creating a column to store the sharp metadata as a json object.
hmi_meta_data = sql.Column('hmimetadata', JSON, nullable=False)
Однако, когда я запускаю код для построения базы данных, я получаю CompileError
, который говорит:
CompileError: (in table 'observations', column 'hmimetadata'): Compiler <sqlalchemy.dialects.sqlite.base.SQLiteTypeCompiler object at 0x1c1e2b45f8> can't render element of type <class 'sqlalchemy.sql.sqltypes.JSON'>
Я нашел уже на SO некоторые обходные пути для реализации столбца с объектом JSON, но так как этот вопрос был задан некоторое время назад, мне было интересно, есть ли встроенная поддержка, которая отклоняет потребности таких реализаций.
В соответствии с типами sqlalchemy документация Типы JSON должны работать с бэкэндами SQL, которые имеют фактический тип JSON, который включает SQLite начиная с версии 3.9. Я проверял свою версию 3.26, и это последняя версия (sqlite release website ). Тогда это будет важной вехой в будущем выпуске sqlalchemy? Или я что-то еще не рассматриваю?
Спасибо.