Django ORM
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
一、如何在Django项目中使用mysql数据库?
1. 在Django项目的settings.py文件中,配置数据库连接信息:
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "你的数据库名称", # 需要自己手动创建数据库 "USER": "数据库用户名", "PASSWORD": "数据库密码", "HOST": "数据库IP", "POST": 3306 } }
2. 在Django项目的__init__.py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库:
import pymysql pymysql.install_as_MySQLdb()
二、Django中的映射关系
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
first_name 和 last_name 是模型的字段。每个字段被指定为一个类属性,每个属性映射到一个数据库列。
上面的 Person 模型将会像这样创建一个数据库表:
CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
一些说明:
表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时。
id字段是自动添加的,如果你想要指定自定义主键,只需在其中一个字段中指定 primary_key=True 即可。如果Django发现你已经明确地设置了Field.primary_key,它将不会添加自动ID列。
三、常用字段
字段名 | 说明 |
---|---|
AutoField | int自增列,需填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。 |
IntegerField | 整数类型,范围在 -2147483648 to 2147483647。 |
CharField | 字符类型,必须提供max_length参数, max_length表示字符长度。 |
DateField | 日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。 |
DateTimeField | 日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。 |
四、其他不常用字段
字段名 | 说明 |
---|---|
BigAutoField(AutoField) | - bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名为id的列 |
SmallIntegerField(IntegerField) | - 小整数 -32768 ~ 32767 |
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正小整数 0 ~ 32767 |
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正整数 0 ~ 2147483647 |
BigIntegerField(IntegerField) | - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807 |
BooleanField(Field) | - 布尔值类型 |
NullBooleanField(Field): | - 可以为空的布尔值 |
TextField(Field) | -文本类型 |
EmailField(CharField) | - 字符串类型,Django Admin以及ModelForm中提供验证机制 |
IPAddressField(Field) | - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制 |
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" |
URLField(CharField) | - 字符串类型,Django Admin以及ModelForm中提供验证 URL |
SlugField(CharField) | - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号) |
CommaSeparatedIntegerField(CharField) | - 字符串类型,格式必须为逗号分割的数字 |
UUIDField(Field) | - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证 |
FilePathField(Field) | - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能 - 参数:path: 文件夹路径;match=None:正则匹配;recursive=False:递归下面的文件夹;allow_files=True:允许文件;allow_folders=False:允许文件夹; |
FileField(Field) | - 字符串,路径保存在数据库,文件上传到指定目录 - 参数:upload_to = "" :传文件的保存路径;storage = None :存储组件,默认django.core.files.storage.FileSystemStorage |
ImageField(FileField) | - 字符串,路径保存在数据库,文件上传到指定目录 - 参数:upload_to = "":上传文件的保存路径; |
storage = None:存储组件,默认django.core.files.storage.FileSystemStorage;width_field=None, 上传图片的高度保存的数据库字段名(字符串;height_field=None:上传图片的宽度保存的数据库字段名(字符串); | |
DateField(DateTimeCheckMixin, Field) | - 日期格式 YYYY-MM-DD |
TimeField(DateTimeCheckMixin, Field) | - 时间格式 HH:MM[:ss[.uuuuuu]] |
DurationField(Field) | - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型 |
FloatField(Field) | - 浮点型 |
DecimalField(Field) | - 10进制小数 - 参数:max_digits:小数总长度;decimal_places:小数位长度 |
BinaryField(Field) | - 二进制类型 |