如何防止插入 NULL 值并引发异常
how to prevent inserting NULL values and raising exception instead
在运行这段代码之后,数据将被插入到数据库中。当我检查数据库时,我发现一行添加了值:int_field=0 and other="" (empty string)
我的问题是如何在 Null/empty 插入的情况下抛出异常。
from datetime import datetime
db = pw.MySQLDatabase('tests', user = 'root', password = 'root', host = 'localhost', port = 3306)
class Model(pw.Model):
name = pw.CharField()
created_at = pw.DateTimeField(default = datetime.now())
other = pw.CharField(null = False)
int_field = pw.IntegerField(null = False)
class Meta:
database = db
db_table = 'nmodel'
Model.create_table()
Model.create(name = "tests")
我认为您需要将 sql_mode
设置得更严格。参见:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-setting
具体来说,我认为您 运行 喜欢:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_auto_value_on_zero
这是一个 MySQL strict_mode
问题,您应该在 peewee 数据库实例中启用它,如下所示。
将此 (sql_mode='STRICT_ALL_TABLES'
) 添加到构造函数调用中:
db=pw.MySQLDatabase('database_name', user='user_name', password='user_psswd',
host='host_name', port=port_num,sql_mode='STRICT_ALL_TABLES')
这将在传递空值时引发 mysql 异常。
在运行这段代码之后,数据将被插入到数据库中。当我检查数据库时,我发现一行添加了值:int_field=0 and other="" (empty string)
我的问题是如何在 Null/empty 插入的情况下抛出异常。
from datetime import datetime
db = pw.MySQLDatabase('tests', user = 'root', password = 'root', host = 'localhost', port = 3306)
class Model(pw.Model):
name = pw.CharField()
created_at = pw.DateTimeField(default = datetime.now())
other = pw.CharField(null = False)
int_field = pw.IntegerField(null = False)
class Meta:
database = db
db_table = 'nmodel'
Model.create_table()
Model.create(name = "tests")
我认为您需要将 sql_mode
设置得更严格。参见:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-setting
具体来说,我认为您 运行 喜欢:
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sqlmode_no_auto_value_on_zero
这是一个 MySQL strict_mode
问题,您应该在 peewee 数据库实例中启用它,如下所示。
将此 (sql_mode='STRICT_ALL_TABLES'
) 添加到构造函数调用中:
db=pw.MySQLDatabase('database_name', user='user_name', password='user_psswd',
host='host_name', port=port_num,sql_mode='STRICT_ALL_TABLES')
这将在传递空值时引发 mysql 异常。