django—模型相关
配置数据库信息
1、settings配置
DATABASES
=
{
"default"
: {
"ENGINE"
:
"django.db.backends.mysql"
,
"NAME"
:
"你的数据库名称"
,
# 需要自己手动创建数据库
"USER"
:
"数据库用户名"
,
"PASSWORD"
:
"数据库密码"
,
"HOST"
:
"数据库IP"
,
"POST"
:
3306
}
}
2、在django项目的同名目录下的init文件中添加以下代码
import
pymysql
pymysql.install_as_MySQLdb()
补充:
使用django2.0以上进行开发,不需要添加上述代码。
django2.0以上,直接使用mysqlclient,将django与mysql数据库进行连接。
pip install mysqlclient,安装该模块即可
ps:
网上有很多使用django2.0进行开发的情况下,使用pymysql模块进行数据库连接出现报错:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
然后需要通过修改源码来解决,这样也能够解决问题,但是毕竟修改源码对后续项目开发是否会有影响是不可预知的,
所以,个人推荐django2.0以上开发,直接安装mysqlclient模块,进行数据库操作。
模型类
1、定义模型类时需要继承models.Model
2、定义字段类型的时候,也是通过models来调用对应的字段类型
由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段
所以当不定义主键字段的时候 orm会自动创建一个名为id主键字段
也就意味着 在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写
字段
1、AutoField
自增的整型字段,必填参数primary_key=True,则成为数据库的主键。无该字段时,django自动创建。
一个model不能有两个AutoField字段。
2、IntegerField
一个整数类型。数值的范围是 -2147483648 ~ 2147483647。
最多存放10位数字,因此不能用该字段存储手机号
3、CharField
字符类型,必须提供max_length参数。max_length表示字符的长度。
4、DateField
日期类型,日期格式为YYYY-MM-DD,相当于Python中的datetime.date的实例。
参数:
auto_now:新增时自动设置当前时间,每次修改时会更新当前日期时间
auto_now_add:新创建对象时自动添加当前日期时间,修改时不会更新当前日期时间
auto_now和auto_now_add和default参数是互斥的,不能同时设置。
5、DatetimeField
日期时间字段,格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime的实例。
6、AutoField(Field)
- int自增列,必须填入参数 primary_key=True
7、BigAutoField(AutoField)
- bigint自增列,必须填入参数 primary_key=True
注:当model中如果没有自增列,则自动会创建一个列名为id的列
from django.db import models
class UserInfo(models.Model):
# 自动创建一个列名为id的且为自增的整数列
username = models.CharField(max_length=32)
class Group(models.Model):
# 自定义自增列
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
8、SmallIntegerField(IntegerField):
- 小整数 -32768 ~ 32767
9、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正小整数 0 ~ 32767
10、IntegerField(Field)
- 整数列(有符号的) -2147483648 ~ 2147483647
11、PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
- 正整数 0 ~ 2147483647
12、BigIntegerField(IntegerField):
- 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
13、BooleanField(Field)
- 布尔值类型
14、NullBooleanField(Field):
- 可以为空的布尔值
15、CharField(Field)
- 字符类型
- 必须提供max_length参数, max_length表示字符长度
16、TextField(Field)
- 文本类型
17、EmailField(CharField):
- 字符串类型,Django Admin以及ModelForm中提供验证机制
18、IPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
19、GenericIPAddressField(Field)
- 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
- 参数:
protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
20、URLField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证 URL
21、SlugField(CharField)
- 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
22、CommaSeparatedIntegerField(CharField)
- 字符串类型,格式必须为逗号分割的数字
23、UUIDField(Field)
- 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
24、FilePathField(Field)
- 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
- 参数:
path, 文件夹路径
match=None, 正则匹配
recursive=False, 递归下面的文件夹
allow_files=True, 允许文件
allow_folders=False, 允许文件夹
25、FileField(Field)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
26、ImageField(FileField)
- 字符串,路径保存在数据库,文件上传到指定目录
- 参数:
upload_to = "" 上传文件的保存路径
storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
width_field=None, 上传图片的高度保存的数据库字段名(字符串)
height_field=None 上传图片的宽度保存的数据库字段名(字符串)
27、DateTimeField(DateField)
- 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
28、DateField(DateTimeCheckMixin, Field)
- 日期格式 YYYY-MM-DD
29、TimeField(DateTimeCheckMixin, Field)
- 时间格式 HH:MM[:ss[.uuuuuu]]
30、FloatField(Field)
- 浮点型
自定义一个char类型字段
class
MyCharField(models.Field):
"""
自定义的char类型的字段类
"""
def
__init__(
self
, max_length,
*
args,
*
*
kwargs):
self
.max_length
=
max_length
super
(MyCharField,
self
).__init__(max_length
=
max_length,
*
args,
*
*
kwargs)
def
db_type(
self
, connection):
"""
限定生成数据库表的字段类型为char,长度为max_length指定的值
"""
return
'char(%s)'
%
self
.max_length
class
Class(models.Model):
id
=
models.AutoField(primary_key
=
True
)
title
=
models.CharField(max_length
=
25
)
# 使用自定义的char类型的字段
cname
=
MyCharField(max_length
=
25
)
字段参数
模型类的Meta
class
Meta:
# 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
db_table
=
"table_name" # 将数据库中的表名修改成自定义的名称
# admin界面中中显示的表名称
verbose_name
=
'个人信息'
# verbose_name加s
verbose_name_plural
=
'所有用户信息'
# 联合索引
index_together
=
[
(
"pub_date"
,
"deadline"
),
# 应为两个存在的字段
]
# 联合唯一索引
unique_together
=
((
"driver"
,
"restaurant"
),)
# 应为两个存在的字段
还有数据库的排序顺序等,具体见官网
django—模型相关的更多相关文章
- django模型相关的知识点
定义属性 概述: django根据属性的类型确定以下信息 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表增加自动增长的主键列,每个模 ...
- django模型中有外键关系的表删除相关设置
0904自我总结 django模型中有外键关系的表删除相关设置 一.一对一 例如有Author.AuthorDetail两表 author = models.OneToOneField(to='Aut ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django模型——数据库(二)
模型--数据库(二) 实验简介 模型的一些基本操作,save方法用于把对象写入到数据库,objects是模型的管理器,可以使用它的delete.filter.all.order_by和update等函 ...
- Django模型层(2)
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- django模型中的关系对应
显然,关系数据库的力量在于将表相互关联.Django提供了定义三种最常见的数据库关系类型的方法:多对一,多对多和一对一. 在说明之前,首先来理解一下这三个概念: 多对一: 两个集合a,b;集合a中的多 ...
- python3之Django模型(一)
1.模型概述 模型是关于您的数据的唯一,明确的信息来源,它包含您正在存储的数据的重要字段和行为.通常,每个模型映射到单个数据库表. 每个模型都是一个子类的python类django.db.models ...
- Django 模型(数据库)
Django 模型(数据库) ) email = models.EmailField() memo = models.TextField() def __unico ...
随机推荐
- 第一次软件工程与UML作业
这个作业属于哪个课程 https://url.cn/IMQa18Jo 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/homework/ ...
- docker 部署 zabbix
docker部署zabbix 我相信大家都已经会再物理机上跑zabbix并且监控了,那么有没有想过在docker中跑zabbix?下面咱们来看看如何在docker中搭建zabbix并且监控 部署环 ...
- 分布式系统监视zabbix讲解二之邮件报警通知
概述 在上一篇博客<分布式系统监视zabbix讲解一技术流ken>中已经详细讲解了如何安装zabbix,本篇博客将详细讲解如何使用zabbix监控另外一台主机,并实现email报警通知机制 ...
- Vue结合Django-Rest-Frameword结合实现登录认证(一)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 微信公众 ...
- Redis中set集合(无序)操作命令
set集合(无序) set是一个无序的不重复元素的集合 增 sadd 往集合内部添加元素 127.0.0.1:6379> sadd set1 a b c d (integer) 4 127.0. ...
- 20190531模拟赛总结&反思
T1: 来源:Codeforces - Classroom Watch Describe: 给出一个正整数 n,现在问存在多少个 x,使得 x在十进制下的每一位之和加上 x 等于 n. Solut ...
- Leetcode-哈希表
136. 只出现一次的数字 https://leetcode-cn.com/problems/single-number/ 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找 ...
- BeautifulSoup使用手册(查询篇)
目录 开始使用呢 解析器 四种对象 tag对象 标签名(name) 属性值(Attributes) 多值属性 内容 Comment对象 prettify()方法 find_all方法 contents ...
- 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令
一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...
- LRC 滚动器 + Vue.js
LRC 滚动展示VueJS cnblogs @ Orcim 最 近一直在学习尤大大的这个前端框架.Vue 无疑是一款极易上手的前端框架,因为官方的文档就是中文的,十分"本土化", ...