常用字段 (1) AutoField 自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。...是通用的唯一标识符,可以很好的替代带有的 primary_key的AutoField字段。...: id=models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False) (22) ForeignKey 多对一关系,需要两个位置参数...**PROTECT:**通过引发ProtectedError的子类来防止删引用的对象,是django.db.IntegrityError的子类。...(24) OneToOneField 一对一关系的关系,从概念上与带有unique=True的ForeignKey相似,但是在关系的另一侧(主表数据)直接返回单个对象。
mysql是公司内使用的主流数据库,默认事务隔离级别是可重复读。...本文尝试结合django解释应用开发中并发访问数据库可能会遇到的可重复读引起的问题,希望能帮助大家在开发过程中有效避免类似问题,如果老版本应用中出现这类问题也可以快速定位。...先看下如下这段代码在django1.3中会有什么问题: class MyData(models.Model): key = models.CharField(primary_key=True,...的记录还不存在,由于mysql默认的事务隔离级别是可重复读,因此在simple_test整个事务期间,都找不到key=6e3247f8-31c5-46d7-a3e9-1c855077ea56的记录,所以...最后,django1.8只是将这种可重复读引起问题的概率降低了很多,如果我们在事务中处理不当,也会引起类似问题,django本文最开始的例子进行稍微调整,在django1.8中运行一样会报错。
bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,...): id = models.AutoField(primary_key=True) title = models.CharField(max_length=25) # 使用自定义的...---- default 为该字段设置默认值 AutoField参数 primary_key 设置主键。int自增列,必须填入参数 primary_key=True。...models.CASCADE 删除关联数据,与之关联也删除 models.DO_NOTHING 删除关联数据,引发错误IntegrityError models.PROTECT 删除关联数据,引发错误ProtectedError
Enum 枚举类型 DateTime 日期时间类型 Date 传递datetime.date()进去 Time 传递datatime.time() 针对字段的一些参数设置 参数 说明 primary_key...是否为主键 autoincrement 是否自动增长 unique 是否唯一 default 默认值 nullable 是否允许为空 onupdate 更新的时候执行的函数 name 该属性在数据库中的字段映射...=False name = Column(String(10), nullable=False) 继续给User 表加一个字段tel 手机号,我们希望手机号不能重复,每个人对应唯一手机号,于是设置 unique...= User(name='yoyo1', tel='10086', age=20) session.add(obj) # 添加到session session.commit() # 提交到数据库 重复添加相同的...tel,会抛出异常: 1062, "Duplicate entry '10086' for key 'tel'" sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError
大家好,又见面了,我是你们的朋友全栈君。 Django中的ORM Django项目使用MySQL数据库 1....id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。...Django支持MySQL5.5及更高版本。 Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True。...- bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。 3....ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。 但我们不能指望某个工具能一劳永逸地解决所有问题,一些特殊问题还是需要特殊处理的。...id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。...- bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,
Django不支持负索引,只能曲线救国。 6. distinct() distinct(*fields) 去除查询结果中重复的行。 默认情况下,QuerySet不会去除重复的行。...当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。...如果model中有一个你手动设置的主键,并且这个值已经存在于数据库中, 调用create()将会失败并且触发IntegrityError因为主键必须是唯一的。...5. bulk_create() bulk_create(objs, batch_size=None) 以高效的方式(通常只有1个查询,无论有多少对象)将提供的对象列表插入到数据库中: >...查找具有唯一性字段(例如primary_key)的模型是否在一个QuerySet中的最高效的方法是: entry = Entry.objects.get(pk=123) if some_queryset.filter
在app/models.py中定义模型 from django.db import models # 定义模型类 class Title(models.Model): # 定义模型字段...= '标题' verbose_name_plural = '标题' 将模型注册到后台,早app/admin.py中注册 from .models import * from django.contrib...list_display = ['id', 'title', 'time'] ---- 字段类型: # int自增列,必须填入参数 primary_key=True。...primary_key # 如果为True, 这个字段在表中必须有唯一值,默认值是False unique # (时间字段独有)配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库...# 删除关联数据,与之关联也删除 models.CASCADE # 删除关联数据,引发错误IntegrityError models.DO_NOTHING # 删除关联数据,引发错误ProtectedError
Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。...', 'NAME': 'django_demo' } } 这里的 NAME 指的是数据库的名称,需要在 MySQL 里创建一个 django_demo 的数据库。...新增数据的方法有几个: save() :保存 create() :新增数据 bulk_create() :批量新增数据 save() 先试试 save() 方法。...bulk_create() save() 和 create() 都是逐条数据插入的,如果需要批量插入数据的话可以使用 bulk_create() 。...这是 Django 的语法。
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是重复的。...ORM的劣势 ORM的缺点是会在一定程度上牺牲程序的执行效率。 ORM用多了,造成SQL语句就不会写了,关系数据库相关技能退化。 ORM总结 ORM只是一种工具,工具确实能解决一些重复,简单的劳动。...Django支持MySQL5.5及更高版本。 Django中ORM常用的字段和参数 常用的字段 AutoField:int自增型,必须填入参数 primary_key = True 。...bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import...(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,
,比如我们学过的flask,里面的sqlalchemy就是这样一个优秀的模块,通过它可以快速和数据库建立通道,从而使得web编程更为高效,本文主要讲解django的模型。...必填参数primary_key=True,则成为数据库的主键,无该字段时,django自动创建,一个model不能有两个该字段。...:字段的名称,如果未指定,则使用属性的名称 db_index:是否可以建立索引 default:默认值 primary_key:是否为主键 unique:否可以建立唯一索引 editable:字段是否可以编辑...- models.CASCADE,删除关联数据,与之关联也删除 - models.DO_NOTHING,删除关联数据,引发错误IntegrityError...django的数据操作,django内置了一款非常到位的系统管理员登陆设计系统,首先我们创建下用户,如下: python manage.py createsuperuser 然后我们按照要求一步步设置参数
多对一 models.ForeignKey(Model) 多对多 models.ManyToManyField(Model) 字段类型参数 所有字段都有的参数 db_column='name' primary_key...这个不是SQL标准的一部分,完全由Django处理。 DO_NOTHING:SQL等价物:NO ACTION。...指定模型属于哪个应用(如果在settings里面已经注册过应用的话,就不用写这个字段了) db_tablespace 定义数据库表空间的名字 Django 数据表操作 更改数据表 删除数据库表步骤...删除对应的模型类代码 删除migrationd文件夹下面的模型类 删除Django的migrations表中对应的记录 删除数据库表 导入数据 Django shell 导入数据 引入模型 调用模型对象的...(),bulk_create(),create_or_update() 创建,批量创建,创建或更新 更新对象 update(),update_or_create() 更新,更新或创建 删除对象 delete
因为,默认的,Django为每个模块设置一个field: id = models.AutoField(primary_key=True) 如果想自己指定一个自定义的主键列,则必须按上述设置,显示指定字段名称...默认200. field对应的默认表单组件为:TextInput UUIDField 存储全球唯一标识(universally unique identifier)。使用Python的UUID类。...但是数据库不会生成UUID,所以推荐使用default,如下: import uuidfrom django.db import models class MyUUIDModel(models.Model...): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # other fields 参考链接...如果是可调用对象,每次创建对象,都会被调用 help_text 同表单组件一起展示的帮助说明 primary_key 如果设置primary_key=True,那么该field将是model的主键 主键
首次对查询集进行求值 —— 同时发生数据库查询 ——Django 将保存查询的结果到查询集的缓存中并返回明确请求的结果(例如,如果正在迭代查询集,则返回下一个结果)。...例如,重复获取查询集对象中一个特定的索引将每次都查询数据库: 1 2 3 >>> queryset = Entry.objects.all() >>> print queryset[5] # Queries...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...也接受无参数的调用,Django会尽可能深的递归查询所有的字段。但注意有Django递归的限制和性能的浪费。 Django >= 1.7,链式调用的select_related相当于使用可变长参数。
最近项目中遇到一个需求,在Django的model中主键要带有前缀的递增类型主键,比如:exp-1, exp-2…,类似.这样,而且在所有的model中,主键里面递增的数据要唯一,不能有重复。...我采用的方法其实也很简单: 创建一个单独的model,里面只有一个models.AutoField类型的字段,可以确保主键中递增的数字是全局唯一的 在实际业务model中定义一个models.CharFiled...类型的主键 修改save方法,为业务模型的主键加上前缀 下面是示例代码,可以参考 from django.db import models class AutoIncrementFields(models.Model...): """ provide a unique ID for all models of code sign """ id = models.AutoField(primary_key...class A(models.Model): """ example """ case_id = models.CharField(max_length=128, primary_key
例如,重复获取查询集对象中一个特定的索引将每次都查询数据库: >>> queryset = Entry.objects.all() >>> print queryset[5] # Queries the...所以使 #用iterator()的时候要当心,确保你的代码在操作一个大的queryset时没有重复执行查询。...也可以通过depth参数指定递归的深度,Django会自动缓存指定深度内所有的字段。如果要访问指定深度外的字段,Django会再次进行SQL查询。...也接受无参数的调用,Django会尽可能深的递归查询所有的字段。但注意有Django递归的限制和性能的浪费。 Django >= 1.7,链式调用的select_related相当于使用可变长参数。... .objects.extra(where=['nid in (1,3) OR title like "py%" ','nid>2']) 回到顶部 整体插入 创建对象时,尽可能使用bulk_create
对应app目录下的models.py 1、生成一个简单的数据库表: 在未指定primary_key的情况下,Django会默认创建一个id自增字段作为主键。...ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能 - 参数: path...- models.DO_NOTHING,删除关联数据,引发错误IntegrityError - models.PROTECT...Django不支持负索引。 6.distinct(): distinct(*fields) 去除查询结果中重复的行。 默认情况下,QuerySet不会去除重复的行。...当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。
(Field) - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 FilePathField(Field) - 字符串,...db_tablespace default 数据库中字段的默认值 primary_key 数据库中字段是否为主键 db_index...Django Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息 b....(可以被重复选择) 例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。...,删除关联数据,与之关联也删除 - models.DO_NOTHING,删除关联数据,引发错误IntegrityError
2) 关于主键 django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。...默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。 3) 属性命名限制 不能是python的保留关键字。 不允许使用连续的下划线,这是由django的查询方式决定的。...默认值是False db_column 字段的名称,如果未指定,则使用属性的名称 db_index 若值为True, 则在表中会为此字段创建索引,默认值是False default 默认 primary_key...,blank是表单验证范畴的 6) 外键 在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量: CASCADE...允许为null时可用 SET_DEFAULT设置为默认值,仅在该字段设置了默认值时可用 SET()设置为特定值或者调用特定方法 DO_NOTHING不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError
我们可以在Flask-SQLAlchemy字段中添加unique=True设置该字段为唯一约束,如果需要2个字段联合唯一,需用到UniqueConstraint() 联合唯一约束 比如一个书名可以有不同的出版社...,但是同一个出版社不能有重复的书名。...设置联合唯一约束 class Books(db.Model): __tablename__ = 'book' # 数据库表名 id = db.Column(db.Integer, primary_key...book=Books(name='selenium',publisher='上海') >>> db.session.add(book) >>> db.session.commit() 可以添加成功 重复添加上面数据就会报错...pymysql\err.py", line 143, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.IntegrityError
领取专属 10元无门槛券
手把手带您无忧上云