是否可以使用sqlalchemy在SQLite中创建JSON类型的列? 我试过了
import sqlalchemy.types as types
...
myColumn = Column(types.JSON())
和
from sqlalchemy import JSON
...
mycolumn = Column(JSON)
两者都收到错误消息:
编译器无法呈现
类型的元素
想知道sqlalchemy中是否有任何解决方案,或者我应该改为SQL。提前谢谢。
[更新] SQLite版本3.16.0
答案 0 :(得分:6)
我的解决方案是:
import json
from sqlalchemy import TypeDecorator, types
class Json(TypeDecorator):
@property
def python_type(self):
return object
impl = types.String
def process_bind_param(self, value, dialect):
return json.dumps(value)
def process_literal_param(self, value, dialect):
return value
def process_result_value(self, value, dialect):
try:
return json.loads(value)
except (ValueError, TypeError):
return None
...
myColumn = Column("name", Json)
有关详细信息:TypeDecorator
答案 1 :(得分:5)
直到版本3.9,JSON才被添加到SQLite。您需要升级SQLite或将json转换为字符串并将其保存,并在将其拉出时将其转换回json对象。
答案 2 :(得分:3)
SQLAlchemy 1.3将包含对SQLite JSON extension的支持,所以请不要忘记升级:
pip install --user -U --pre SQLAlchemy
方言特定类型sqlite.JSON
实现JSON成员访问,也可以通过基本类型types.JSON
使用。