Django项目的ORM操作之--数据模型类创建
在django项目中,其自带了ORM(Object Relation Mapping)对象关系映射框架,我们在django项目下app的models模块下对类进行操作,通过ORM会将我们对类的操作转化为具体的数据库sql语句,继而实现对数据库的操作。
1. 数据模型类的简单创建:
在django项目下的app的models模块下:
注意:实现orm映射的前提是创建的类必须继承自django.db包下的models模块的Model类。
# 1.导入模块
from django.db import models
# 2.创建类,继承 --> 对应数据库操作是创建表,表名字为“app名+类名”, 名字自动全部转换为小写;
# sql语句: create table book_app_bookinfo(字段信息);
class BookInfo(models.Model):
pass
'''
也可通过元选项自定义在数据库中创建的表名,意义不大。
class Meta:
db_table = 'my_tablename'
'''
# 3.设计好了数据模型的类,即相当于创建好了表。但是我们发现上面这张表设计的时候并没有设计表的字段,这显然是不对的,下面进行字段的设计
class BookInfo(moels.Model):
# 设计字段名为bname, 约束字段类型为char,最大长度为20
bname = models.CharField(max_length=20)
bisDelete = models.BooleanField(default=false) # 逻辑删除,默认false
# 4.模型类已经完成,再将models模块的内容进行迁移即可执行ORM转换的sql语句,对数据库进行对应操作
在命令行下,进入当前django项目所在的(虚拟)环境,执行以下:
$ django-admin mkmigrations # 生产迁移文件(在django项目的app目录下的migrations目录下可看到生产了对应的迁移文件)
$ django-admin migrate # 执行迁移(即执行了对应的sql语句)
查看数据库,可以看到当前的数据库中新增了一张表book_app_bookinfo,主键id我们并没有设计,会自动给我们设计好。
2.数据模型类的映射关系:
app名:book_app
类名:BookInfo -->表名:book_app_bookinfo
类属性创建时的方法:CharField/BooleanField -->字段属性: char/bool
方法的参数选项:max_length/default -->字段属性的约束选项
[字段名] = models.[字段属性]([属性约束选项])
3.常用字段属性:
AutoField -->自动增长的IntegerField,通常不指定,django会自动创建,auto_increment
CharField -->字符串类型,必须有(max_length=[xx])参数
BooleanField -->布尔类型,不能为空(default=[ture/false])
DateField -->日期类型,参数:auto_now:自动设置为最后一次修改的时间戳 auto_now_add:自动设置为第一次创建时的时间戳
DateTimeField/TimeField -->日期类型,参数同DateField
SamllIntegerField -->整数类型,对应tinyint/smallint/int/bigint
Decimal -->小数类型,必须指定整数位和小数位(例: (max_digits=None,decimal_places=None))
BinaryField -->二进制类型
FloatField -->浮点类型
4.常用字段属性选项:
primary_key -->默认为False,True表示为主键,一般AutoField使用
null -->默认为False,True表示该字段可以为空(添加数据时该字段可以不设置)
blank -->默认为False,True表示添加数据时该字段的值可以为空值
default -->设置默认值
max_length -->最大长度
Django项目的ORM操作之--数据模型类创建的更多相关文章
- Django项目的ORM操作之--模型类数据查询
1.查询基本格式及理解: 类名.objects.[查询条件] 例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo, 对应模型类的操作 ...
- Django学习之ORM操作
一.一般操作 二.必知必会13条 返回QuerySet对象的方法有 特殊的QuerySet 返回具体对象的 返回布尔值的方法有 返回数字的方法 三.单表查询之神奇的双下划线 四.ForeignKey操 ...
- Django专题之ORM操作2
Django ORM操作 目录 一般操作 看专业的官网文档,做专业的程序员! 回到顶部 必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs ...
- Python/Django(CBV/FBV/ORM操作)
Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...
- Django - 表与ORM操作
Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...
- 跨过Nginx上基于uWSGI部署Django项目的坑
先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多 ...
- 初学Django基础02 ORM操作
django的ORM操作 之前我们知道了models.py这个文件,这个文件是用来读取数据结构的文件,每次操作数据时都走这个模块 常用字段 AutoField int自增列,必须填入参数 primar ...
- Django 模型层 ORM 操作
运行环境 1. Django:2.1.3 version 2. PyMysql: 0.9.3 version 3. pip :19.0.3 version 4. python : 3.7 versio ...
- docker笔记(3) ------Django项目的docker部署
2019-01-12 14:23:18 django容器连接到mysql_server容器分析:原myblog项目使用sqlit3数据库,使用mysql容器前需要在django中加入pymysql ...
随机推荐
- ODP.NET Oracle12.1版本免安装发布(IIS WebServices)
1.ODP.NET必须的DLL OCI.DLL Oracle.DataAccess.dll OraOps12.dll msvcr100.dll oraociei12.dll oraons.dll 2. ...
- logstash编写2以及结合kibana使用
有时候根据日志的内容,可能一行不能全部显示,会延续在下一行,为了将上下内容关联在一起,于是codec插件中的multiline插件 就派上用场了,源日志内容: [2017-09-20T16:04:34 ...
- RocEDU.阅读.写作《苏菲的世界》书摘
我们在成长的过程当中,似乎失去了对这世界的好奇心.也正因此,我们丧失了某种极为重要的能力(这也是一种哲学家们想要使人们恢复的能力).因为,在我们内心的某处,有某个声音告诉我们:生命是一种很庞大的.神秘 ...
- HTTP-java访问https资源时,忽略证书信任问题,代码栗子
java程序在访问https资源时,出现报错 sun.security.validator.ValidatorException: PKIX path building failed: sun.sec ...
- java 普通内部类和静态内部类
区别1: 普通内部类实例化后的对象持有外部类的引用,在非静态类内部可以访问外部类的成员:静态内部类实例化不持有外部对象引用,不能访问外面的方法和成员: 从耦合度上来讲,普通内部类跟外部类耦合程度很高, ...
- spark SQL学习(认识spark SQL)
spark SQL初步认识 spark SQL是spark的一个模块,主要用于进行结构化数据的处理.它提供的最核心的编程抽象就是DataFrame. DataFrame:它可以根据很多源进行构建,包括 ...
- 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
文章翻译: 翻译 以下文章来源: 链接
- Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused)
一.linux中配置redis,使用java连接测试时报错: Exception in thread "main" redis.clients.jedis.exceptions.J ...
- php入门(三)
PHP 面向对象: 在php5中 var就是public的别名. 变量 $this 代表自身的对象. PHP_EOL;为换行符 构造函数+析构函数 <?php class Site { /* 成 ...
- 使用MessageFormat替换字符中的占位符
使用String.format可以实现字符串的格式化功能,即将后面参数中的值替换掉format中的%s,%d这些值.但MessageFormat更为强大,不用管传入值是字符串还是数字,使用占位符即可. ...