我正在运行脚本以使用SQLAlchamy填充SQL Server 2017数据库上的表。该脚本在几周前完美运行。
本质上,服务器似乎没有在不可为空的字段上填充默认值。
例如,当我运行以下语句(由SQLA呈现)时:
INSERT INTO concept
(
retired,
short_name,
description,
form_text,
datatype_id,
class_id,
is_set,
creator,
date_created,
version,
changed_by,
date_changed,
retired_by,
date_retired,
retire_reason,
uuid,
note_regex
)
VALUES
(
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?,
?
)'] [parameters: (0,
'ck',
'creatine phosphokinase',
None,
14,
49,
0,
0,
None,
None,
None,
None,
None,
None,
None,
'cf6443ff-f2a1-49ab-96e3-c5d6fac362ed', None)]
我收到错误:
Cannot insert the value NULL into column 'date_created',
table 'myositis_longetudinal_cohort.dbo.concept'; column does not allow
nulls. INSERT fails. (515)
这让我感到困惑,因为date_created字段的默认值为getdate()
这是约束语句:
ALTER TABLE [dbo].[concept]
ADD CONSTRAINT [DF__concept__date_cr__62AFA012] DEFAULT (Getdate()) FOR
[date_created]
我是SQL Server的新手,不确定我可能缺少的内容。该服务器的更新时间为11/15/18,但我没有在更新中看到任何可以解释此更改的信息。
在此先感谢您的帮助!
答案 0 :(得分:0)
INSERT INTO concept
(
retired,
short_name,
description,
form_text,
datatype_id,
class_id,
is_set,
creator,
date_created, <--SPECIFYING HERE MEANS DEFAULT WON'T BE USED
version,
changed_by,
date_changed,
retired_by,
date_retired,
retire_reason,
uuid,
note_regex
)
参数:
[parameters: (
0, <-- retired,
'ck', <-- short_name,
'creatine phosphokinase', <-- description,
None, <-- form_text,
14, <-- datatype_id,
49, <-- class_id,
0, <-- is_set,
0, <-- creator,
None, <-- date_created (provided with NULL)
None,
None,
None,
None,
None,
None,
'cf6443ff-f2a1-49ab-96e3-c5d6fac362ed',
None
)]
表中具有NON_NULL_DEFAULT + NOTNULL_CONSTRAINT的所有其他列也会发生相同的问题
关于突然开始发生的可能性:
答案 1 :(得分:-1)
感谢大家。
事实证明,这是一个SQLAlchemy问题。
我必须将autoload: true
添加到__table_args__
中,而不是手动定义每个列。显然,如果您不允许SQLA对表进行内部检查,则它将生成NULL作为值传递,而不是按照@larnu等建议的生成插入语句时跳过该值。