mysql model层_models模型层

ORM简介

查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装

5f21b08be607ecaa18ee4b84b8163efd.png

MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动

ORM是“对象-关系-映射”的简称。

#sql中的表

#创建表:

CREATE TABLE employee(

id INT PRIMARY KEY auto_increment ,

name VARCHAR (20),

gender BIT default 1,

birthday DATA ,

department VARCHAR (20),

salary DECIMAL (8,2) unsigned,

);

#sql中的表纪录

#添加一条表纪录:

INSERT employee (name,gender,birthday,salary,department)

VALUES ("alex",1,"1985-12-12",8000,"保洁部");

#查询一条表纪录:

SELECT * FROM employee WHERE age=24;

#更新一条表纪录:

UPDATE employee SET birthday="1989-10-24" WHERE id=1;

#删除一条表纪录:

DELETE FROM employee WHERE name="alex"

#python的类

class Employee(models.Model):

id=models.AutoField(primary_key=True)

name=models.CharField(max_length=32)

gender=models.BooleanField()

birthday=models.DateField()

department=models.CharField(max_length=32)

salary=models.DecimalField(max_digits=8,decimal_places=2)

#python的类对象

#添加一条表纪录:

emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")

emp.save()

#查询一条表纪录:

Employee.objects.filter(age=24)

#更新一条表纪录:

Employee.objects.filter(id=1).update(birthday="1989-10-24")

#删除一条表纪录:

Employee.objects.filter(name="alex").delete()

Django ORM中常用字段和参数

一些说明:

表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时。

id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。如果Django发现你已经明确地设置了Field.primary_key,它将不会添加自动ID列。

本示例中的CREATE TABLE SQL使用PostgreSQL语法进行格式化,但值得注意的是,Django会根据配置文件中指定的数据库后端类型来生成相应的SQL语句。

Django支持MySQL5.5及更高版本。

常用字段

AutoField

int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

IntegerField

一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)

CharField

字符类型,必须提供max_length参数, max_length表示字符长度。

这里需要知道的是Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段,但是Django允许我们自定义新的字段,下面我来自定义对应于数据库的char类型

dbebbf654a2ed72de5b4ec429d12226a.png

DateField

日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。

DateTimeField

日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。

字段参数

null

用于表示某个字段可以为空。

unique

如果设置为unique=True 则该字段在此表中必须是唯一的 。

db_index

如果db_index=True 则代表着为此字段设置索引。

default

为该字段设置默认值。

DateField和DateTimeField

auto_now_add

配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

auto_now

配置上auto_now=True,每次更新数据记录的时候会更新该字段。

关系字段

ForeignKey

外键类型在ORM中用来表示外键关联关系,一般把ForeignKey字段设置在 '一对多'中'多'的一方。

ForeignKey可以和其他表做关联关系同时也可以和自身做关联关系。

字段参数

to

设置要关联的表

to_field

设置要关联的表的字段

on_delete

当删除关联表中的数据时,当前表与其关联的行的行为。

models.CASCADE

删除关联数据,与之关联也删除

db_constraint

是否在数据库中创建外键约束,默认为True。

其余字段参数

models.DO_NOTHING

删除关联数据,引发错误IntegrityError

models.PROTECT

删除关联数据,引发错误ProtectedError

models.SET_NULL

删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

models.SET_DEFAULT

删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值