我正在尝试通过 SQLModel 定义一个 JSON 列:
from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine, JSON
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
meta: JSON
代码来自SQLModel,但由“元”属性扩展。
将上面的代码与示例代码的其余部分(设置 sqlite,添加数据)一起使用,我收到以下错误:
RuntimeError: no validator found for <class 'sqlalchemy.sql.sqltypes.JSON'>, see `arbitrary_types_allowed` in Config
我试图通过
class Hero(SQLModel, table=True):
[...]
meta: JSON
@validator('meta')
def validate_json(v):
return v
class Config:
arbitrary_types_allowed = True
但这会导致另一个错误:
sqlalchemy.exc.CompileError: (in table 'hero', column 'meta'): Can't generate DDL for NullType(); did you forget to specify a type on this Column?
我只使用 SQLAlchemy 进行了尝试,它已经奏效了。
那么有什么想法可以在 SQLModel 和 SQLAlchemy 之间为 JSON 字段完成“连接”吗?
更新:我还测试了将其设置为可选并给它一个默认值。没有成功(2.再次出错):
class Hero(SQLModel, table=True):
[...]
meta: Optional[JSON] = {}
class Config:
arbitrary_types_allowed = True
小提示:即使JSON
是从 导入SQLModel
,最终还是从 导入,SQLAlchemy.sqltypes
没有任何变化。