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"
),)
# 应为两个存在的字段
还有数据库的排序顺序等,具体见官网
最新文章
- [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
- 老生长谈:css实现右侧固定宽度,左侧宽度自适应
- quick cocos2d-x 入门---井字棋
- SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法
- Java当中的内存分配以及值传递问题内存解析
- android4.3 Bluetooth(le)分析之startLeScan分析
- ECharts SSH+JQueryAjax+Json+JSP将数据库中数据填充到ECharts中
- cojs QAQ的序列 解题报告
- Spring IoC容器的设计—2—主线
- 团体程序设计天梯赛-练习集L2-003. 月饼
- Oracle的用户管理,授权及备份
- c++中的namespace(附程序运行图)
- highstaock+websocket实现动态展现
- Spring Cloud入门教程-Hystrix断路器实现容错和降级
- Java的selenium代码随笔(7)
- aview安装和使用
- [Android]Eclipse 安装 ADT[Android Development Tooling] 失败的两种解决办法
- 实现一个 Virtual DOM 算法
- 摘:";error LNK2019: 无法解析的外部符号 该符号在函数 中被引用"; 错误原因
- Maven+MyBatis 初试