我试图通过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,但由"meta“属性扩展。
使用上面的代码和示例代码的其余部分(设置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,它已经成功了。
那么,对于JSON字段,我怎样才能在SQLModel和SQLAlchemy之间实现“连接”呢?
更新:我还测试了设置它的可选性,并给它一个默认值。没有成功(2.再次出错):
class Hero(SQLModel, table=True):
[...]
meta: Optional[JSON] = {}
class Config:
arbitrary_types_allowed = True 小提示:即使JSON是从SQLModel导入的,它最终也是从SQLAlchemy.sqltypes导入的,没有任何更改。
发布于 2022-01-10 22:22:07
我相信您正在寻找的连接可能是由字段的sa_column参数提供的,例如:
class Hero(SQLModel, table=True):
[...]
meta: Dict = Field(default={}, sa_column=Column(JSON))
# Needed for Column(JSON)
class Config:
arbitrary_types_allowed = Truehttps://stackoverflow.com/questions/70567929
复制相似问题