Flask: Stuck with qlalchemy.exc.IntegrityError: (sqlite3.完整性



所以我写了一个交付跟踪器,我到了我开始向数据库添加交付的地方,但我一直遇到不为空的约束失败。

这是模型

class Delivery(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
tag = db.Column(db.String(4), nullable=False, unique=False)
product = db.Column(db.String, nullable=False, unique=False)
quanity = db.Column(db.Integer, nullable=False, unique=False)
po_num = db.Column(db.String, nullable=False, unique=False)
tracking = db.Column(db.String, nullable=True, unique=False)
date = db.Column(db.DateTime, nullable=True, unique=False)
signed = db.Column(db.String(2), nullable=False, unique=False)
tickprojnum = db.Column(db.String, nullable=True, unique=False)
location = db.Column(db.String, nullable=True, unique=False)

这是处理它的路线

form = CreateDelivery()
if form.validate_on_submit:
delivery = Delivery(
tag = form.tag.data,
product = form.product.data,
quanity = form.quanity.data,
po_num = form.po_num.data,
tracking = form.tracking.data,
date = form.date.data,
signed = form.signed.data,
tickprojnum = form.tickprojnum.data,
location = form.location.data
)
db.session.add(delivery)
db.session.commit()

作为检查,我从SQLite工具中获得了架构

CREATE TABLE delivery (
id INTEGER NOT NULL, 
tag VARCHAR(4) NOT NULL, 
product VARCHAR NOT NULL, 
quanity INTEGER NOT NULL,
po_num VARCHAR NOT NULL,
tracking VARCHAR,
date DATETIME,
signed VARCHAR(2) NOT NULL,
tickprojnum VARCHAR,
location VARCHAR,
PRIMARY KEY (id)

我更新了模型,但因此我重建了数据库文件,以便它具有正确的架构,但它仍然给出非空约束错误。非常感谢有关如何解决此问题的任何建议。如果需要更多信息,请告诉我。

我忘记了一组括号

if form.validate_on_submit:

应该是

if form.validate_on_submit():

我不确定,但是当您尝试访问数据库文件中未创建的任何列时,或者有时当您不访问您创建的列时,就会发生这种情况。 因此,要处理它,请使用create_all((命令重新创建数据库文件。 它可能会解决您的问题。

最新更新