sessionmaker(bind=engine) # 实例化 session = Session() # 新增数据 obj = User(tel='10086', age=20) session.add...# 添加到session session.commit() # 提交到数据库 如果name字段(nullable=False)不传,会抛出异常:"Column 'name' cannot be null..." sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1048, "Column 'name' cannot be null")...session.commit() # 提交到数据库 重复添加相同的tel,会抛出异常: 1062, "Duplicate entry '10086' for key 'tel'" sqlalchemy.exc.IntegrityError...: (pymysql.err.IntegrityError) (1062, "Duplicate entry '10086' for key 'tel'") [SQL: INSERT INTO user
False,一般作为AutoField的选项使用 primary_key # 如果为True, 这个字段在表中必须有唯一值,默认值是False unique # (时间字段独有)配置auto_now_add...auto_now_add # (时间字段独有)配置上auto_now=True,每次更新数据记录的时候会更新该字段。...# 删除关联数据,与之关联也删除 models.CASCADE # 删除关联数据,引发错误IntegrityError models.DO_NOTHING # 删除关联数据,引发错误ProtectedError...models.PROTECT # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) models.SET_NULL # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值...) models.SET_DEFAULT # 删除关联数据,与之关联的值设为指定值 models.SET # 是否在数据库中创建外键约束,默认为True。
表锁(了解) class LockingManager(models.Manager): """ Add lock/unlock functionality to manager....(model.Manager)类 manager = LockingManager() counter = models.IntegerField(null...django.db.backends.mysql', ...... } #还可以配置其他数据库 } 上面这种方式是统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败...except IntegrityError: handle_exception() add_children() 这个例子中,即使generate_relationships...()中的代码打破了数据完整性约束,你仍然可以在add_children()中执行数据库操作,并且create_parent()产生的更改也有效。
前言 我们可以在Flask-SQLAlchemy字段中添加unique=True设置该字段为唯一约束,如果需要2个字段联合唯一,需用到UniqueConstraint() 联合唯一约束 比如一个书名可以有不同的出版社...Flask-SQLAlchemy 中 使用 db.UniqueConstraint() 设置联合唯一约束 class Books(db.Model): __tablename__ = 'book...self.id}', name='{self.name}'...)>" 测试 >>> book=Books(name='selenium',publisher='上海') >>> db.session.add...pymysql\err.py", line 143, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.IntegrityError
Django会模拟SQL约束的行为,在删除此条数据时,同事删除外键关联的对象。...models.SET_NULL 设置关联的外键内容为null。只有设置了null=True时可用。当数据被删除时,被关联的外键内容被设置为null。...如果后端数据库有强制关联操作,这是容易报错:IntegrityError,除非你在数据库中手动添加了SQL的ON DELETE约束。
FloatField 浮点数 DateField 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add...表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 TimeField 时间...null参数是数据库层面的,设置null=True之后,表示数据库的该字段可以为空;blank参数是表单层面(HTML),blank=True之后,表示表单填写该字段的时候可以不填。...但是通常大家学习的数据库课程中,都会有数据库设计范式,其中有个第三范式就是专指的外键约束。在这里只是简单的介绍一下。下面是另外一个模型,和前面的BookInfo模型通过外键关联起来。...,此选项会抛出IntegrityError异常 注意:我们在数据库中,设置外键的时候需要制定另一张表中关联的字段,但是在Django里并没有指定。
auto_now_add:新创建对象时自动添加当前日期时间,用于“创建时间”时使用。 auto_now和auto_now_add和default参数是互斥的,不能同时设置。...当删除由a引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为。...Django会在DELETE CASCADE上模拟 SQL约束的行为,并删除包含ForeignKey的对象。 **DO_NOTHING:**不采取行动。...**PROTECT:**通过引发ProtectedError的子类来防止删引用的对象,是django.db.IntegrityError的子类。...SET_NULL:删除时把外键置为null,当null=True时才可以使用。 SET_DEFAULT:把外键置为默认值,必须要设置默认值时才可以使用。
CASCADE 级联删除,此类选项模仿SQL语句ON DELETE CASCADE,再删除此字段信息的时候同时删除包含ForeignKey字段的目标(object) PROTECT 通过django.db.IntegrityError...中的ProtectedError来保护此字段不被删除,若进行删除操作则抛出错误 SET_NULL 将ForeignKey置为空,这只在null选项为True的时候产生作用 SET_DEFAULT 设为默认值...若数据库提高了引用完整性,则此种设置会抛出一个IntegrityError,除非对这一数据字段手动添加了SQL语句中的ON DELETE字段 还可以通过设置abstract属性来定义一个抽象类: from...默认为字段名 related_query_name 用于filter函数过滤和values函数 to_field 关系关联的相关对象名称 db_constraint 控制在数据库中是否应该建立这一字段的约束...通过元组来给出中间项关联的两个类名,可以查看上面的示例 db_table 可以通过这一属性来手动设定保存这一字段的数据表名称,若不设置则默认为字段的名称 db_contraint 是否在数据库中建立约束
models.AutoField(primary_key=True) 数据库层面对应的SQL如下 CREATE TABLE `myapp_testmodel` ( `id` int(11) NOT NULL...DateTimeField:主要存储时间相关的数据类型,格式为YYYY-MM-DD HH:MM:[ss[.uuuuuu]][TZ] 注意:DateField与DateTimeField有两个属性,配置auto_now_add...那么和这个出版社有关联的书籍也都被删除掉了,下面介绍on_delete的参数值: on_delete=models.CASCADE:删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING:删除关联数据,引发错误IntegrityError...on_delete=models.PROTECT:删除关联数据,引发错误ProtectedError on_delete=models.SET_NULL:删除关联数据,与之关联的值设置为null(前提...、与之关联的值设置为指定值,设置:models.SET(值) b、与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) 5、db_constraint:是否在数据库中创建外键约束
如果想接受 null 值,使用 NullBooleanField 。 CharField TextInput 字符串字段,针对长度较小的字符串。大量文本应该使用 TextField 。...有两个额外的可选参数: auto_now ,每次保存对象时自动设为当前日期 auto_now_add ,创建对象时自动设为当前日期。...注:数据参考来源w3cschool 上面的字段很容易让人想起数据库中的数据类型,所以这些字段也就会有约束,常用的约束如下: null:字段是否可以为空 blank:是否允许用户输入为空 db_column...- models.CASCADE,删除关联数据,与之关联也删除 - models.DO_NOTHING,删除关联数据,引发错误IntegrityError...删除关联数据,与之关联的值设为null(前提FK字段需要设为可空) - models.SET_DEFAULT 删除关联数据,与之关联的值设为默认值(前提FK
primary key (ID) using index tablespace DJANGO; alter table AUTH_GROUP add unique (NAME) using...key (ID) using index tablespace DJANGO; alter table AUTH_GROUP add unique (NAME) using index...但是,但是,创建admin用户密码的时候就报错了,ORA-01400: cannot insert NULL into (“DJANGO”.“AUTH_USER”...._param_generator(params)) cx_Oracle.IntegrityError: ORA-01400: cannot insert NULL into ("DJANGO"."..._param_generator(params)) django.db.utils.IntegrityError: ORA-01400: cannot insert NULL into ("DJANGO
Add可以向表中添加多个列和/或约束。只需指定一次ADD关键字,后跟一个逗号分隔的列表。可以使用逗号分隔的列表向表中添加多个新列,向现有列中添加约束条件列表,或者同时向现有列中添加新列和约束条件。...如果尝试通过ALTER TABLE TABLE NAME ADD COLUMN语句将字段添加到表中: 如果该名称的列已经存在,则该语句将失败,并显示SQLCODE-306错误。...如果语句对列指定了NOT NULL约束,并且该列没有默认值,则如果表中已存在数据,则该语句将失败。这是因为,在完成DDL语句之后,不满足所有预先存在的行的NOT NULL约束。...如果该语句没有对列指定NOT NULL约束,并且该列有默认值,则在任何现有行中都不会更新该列。这些行的列值为NULL。...要更改此默认的NOT NULL约束行为,参考SET OPTION命令的COMPILEMODE=NOCHECK选项。
'110222198912032546');#成功,tel允许为空 insert into student values(3,null,null,'110222198912032547');#失败 ERROR...unique key(tel); alter table student add unique key(cardid); # 3.5 关于复合唯一约束 create table 表名称( 字段名...);#成功 insert into temp values(null,'李琦');#失败 ERROR 1048 (23000): Column 'id' cannot be null mysql>...ADD PRIMARY KEY (sid); ALTER TABLE emp5 ADD PRIMARY KEY(NAME,pwd); # 4.5 关于复合主键 create table 表名称( 字段名...(外键约束失败) (`atguigudb`.
models.CharField(max_length=20, verbose_name='名称') pub_date = models.DateField(verbose_name='发布日期',null...FloatField 浮点数 DateField 日期, 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add...表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误 TimeField 时间...设置为NULL,仅在该字段null=True允许为null时可用 SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用 SET()设置为特定值或者调用特定方法 DO_NOTHING不做任何操作...,如果数据库前置指明级联性,此选项会抛出IntegrityError异常 二、模型类迁移 将模型类同步到数据库中。
实际案例(此实例用伪代码2的格式): models.py 数据表 class Author(models.Model): name = models.CharField(max_length=30,null...=False) age = models.IntegerField() email = models.URLField(null=True) class Count(models.Model...django.http import HttpResponse from index.models import Author,Count from django.db import transaction,IntegrityError...def add_author_views(request): author_name = u'renyingying' author = Author(name=author_name...models.py上文的案例一样 views.py from django.db import transaction # open a transaction @transaction.atomic def add_author_views
CREATE TABLE Production.TransactionHistoryArchive1 ( TransactionID int IDENTITY (1,1) NOT NULL...unique约束确保不重复,但可为null. check 约束 是通过限制一个或多个列可接受的值,check 约束可以强制域完整性。...GO 在现有表中创建唯一约束 USE AdventureWorks2012; GO ALTER TABLE Person.Password ADD CONSTRAINT AK_Password...dbo.DocExc ADD ColumnD int NULL CONSTRAINT CHK_ColumnD_DocExc CHECK (ColumnD > 10...INTO dbo.DocExc (ColumnD) VALUES (49); GO -- Adding values that will fail the check constraint 失败
table score add CONSTRAINT uc_sname UNIQUE(sname); 如果表中现有记录有重复值,不允许添加唯一性约束。...NULL; 2、创建非空约束 非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。...A、创建表时给列指定非空约束 create table score (sname VARCHAR(10) not NULL, score int not NULL ); B、给指定列指定非空约束...insert into score values (1,98) 在成绩表插入一条记录,学号是2,失败。...删除score表的外键约束 ALTER TABLEscoreDROP FOREIGN KEYscore_fk; 增加score表的sid列外键约束 ALTER TABLE `score` ADD CONSTRAINT
1.为啥使用约束条件: 约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间....约束条件分类:非空(NOT NULL),唯一(UNIQUE),主键(PRIMARY KEY),外键(FOREIGN KEY),检查(CHECK)....: ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type(column,…); 3.非空约束(NOT NULL...建表时约束不指定名字:CREATE TABLE arwen(ename char(10),eno int NOT NULL)....—只有NOT NULL用MODIFY其他用ADD 创建约束后使用: INSERT INTO arwen(ename) VALUES(‘good’);会出错,提示无法插入NULL. 4.唯一约束(UNIQUE
空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是...@NotEmpty 检查约束元素是否为NULL或者是EMPTY. ...这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值....2.5.3 修改参数校验模式 SpringBoot默认的是对所有的实体类属性进行验证,之后才会抛出异常,这样效率就会变低,但是其实只要有一个验证失败,那么就代表这个请求失败,直接拒绝这个请求,所以我们创建一个配置类...如果注解校验失败后端直接抛出异常的,并不会给前端返回任何的数据,我们如果想要返回自定义的验证失败信息就需要再配置下全局异常监听。
(null=False,null=True) ---- unique 设置唯一。如果设置为unique=True 则该字段在此表中必须是唯一的 。 ---- db_index 设置索引。...DateTime参数 ---- auto_now_add 配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。并且修改的时候不会再改变。...models.CASCADE 删除关联数据,与之关联也删除 models.DO_NOTHING 删除关联数据,引发错误IntegrityError models.PROTECT 删除关联数据,引发错误ProtectedError...models.SET_NULL 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) models.SET_DEFAULT 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值...与之关联的值设置为指定值,设置:models.SET(值) 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象) ---- db_constraint 是否在数据库中创建外键约束
领取专属 10元无门槛券
手把手带您无忧上云