在使用sqlalchemy将行插入表中时,如何限制默认的空字符串?

时间:2019-03-27 02:14:02

标签: python mysql sqlalchemy flask-sqlalchemy

我正在尝试在python flask应用程序中使用sqlalchemy将行插入表中。但是,如果我没有为列提供任何值,那么它将自动插入空字符串。我需要限制它。如果没有/无关的值,我需要使插入失败。

假设我有一个这样的桌子,

CREATE TABLE person(
    id int(11) AUTO_INCREMENT NOT NULL,
    name varchar(50) NOT NULL COMMENT 'Name',
    age int(4) NOT NULL COMMENT 'Age',
    sex ENUM('M','F') NOT NULL COMMENT 'sex',
    CONSTRAINT PK_PERSON PRIMARY KEY  (id ASC) 
)

data = {'name': 'xyz', 'sex': 'Z'} 我正在尝试使用不带某些值/不相关值的json对象插入一行。当时它需要引发一些异常,但是会自动获取空字符串。

我几乎在所有地方进行搜索,因此无法找到解决方案。在表模型中,我也是这样定义的,

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    age = db.Column(db.Integer, nullable=False)
    sex = db.Column(db.String, nullable=False)

但是我不知道它是如何自动获取空字符串的。

我正在插入这样的数据

stmt = Person.__table__.insert().values(data)
       db.session.execute(stmt)
       db.session.commit()

预期的响应: 我希望性别列有一些例外,例如不可接受的值,而对于年龄,我没有为非null列提供任何值,所以也期待有例外。

实际回答: 它使用空字符串插入而没有任何异常

id | name | age | sex
1    xyz           

*对于年龄和性别,这些值为空字符串

帮我解决这个问题。

0 个答案:

没有答案