所以我使用了SQLMODEL(带有Pedonic的SqlalChemy),我有类似于这个模型的东西:
class SequencedBaseModel(BaseModel):
sequence_id: str = Field(alias="sequence_id")
@declared_attr
def sequence_id(cls):
return Column(
'sequence_id',
VARCHAR(50),
server_default=text(f"SELECT '{cls.__tablename__}_'"
f" + convert(varchar(10), NEXT VALUE FOR dbo.sequence)"))
class Project(SequencedBaseModel, table=True):
pass
使用SqlAlChemy,我现在try 通过API插入行.请求-json如下所示:
{
"name": "test_project"
}
因此,没有输入Sequence_id,将由数据库生成.SqlAlChemy生成类似以下内容的语句:
insert into Project (name, sequence_id) values ("test_project", null)
这不会错的,如果不是SQL Server...因此,我得到的例外是不能将NULL插入到SEQUENCE_ID列中.对于SQL Server,我们需要关键字default
而不是null
.
如果我执行以下语句
insert into Project (name, sequence_id) values ("test_project", default)
它起作用了...
你知道如何让SQL炼金术在有缺省值的情况下使用缺省值而不是NULL/NONE吗?
我还try 将equence_id更改为使用如下内容
sequence_id: str = Field(alias="sequence_id", default=sqlalchemy.sql.elements.TextClause('default'))
但这也不管用