资讯专栏INFORMATION COLUMN

Django ORM

BlackHole1 / 3279人阅读

摘要:对象关系映射,简称模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。在业务逻辑层和数据库层之间充当了桥梁的作用。每个字段被指定为一个类属性,每个属性映射到一个数据库列。字符类型,必须提供参数,表示字符长度。

对象关系映射(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) - 二进制类型

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42728.html

相关文章

  • Tornado vs Django选型分析

    摘要:前言项目中开发的几个服务一直使用作为服务器,本人也曾提出过疑问,为什么是,得到的答案是比较,,,的并发性能最好,而且最为轻量级。的卖点是超高的开发效率,其性能扩展有限的性能表现前两天有写一篇的帖子传送门使用对鉴权接口加压,看的性能表现。 前言 项目中开发的几个服务一直使用tornado作为http服务器,本人也曾提出过疑问,为什么是tornado,得到的答案是比较tornado,fla...

    Arno 评论0 收藏0
  • Django Model View Template 之间的简单交互 (二)

    摘要:当然还有其他高级的使用,日后再说完整的用户名邮箱联系地址留言信息用户留言信息使用之前已经定义好了数据模型的字段元数据方法等。 前言 接续前文,上一篇文章主要涉及了 Django 项目的基础配置等,这篇主要涉及数据库相关的 ORM ,也就是 Django 中的 Model 的使用,MVT 三层之间的交互 教程基本都是东拼西凑的,防止有些东西表述不准确,因为我之前写 JavaScript ...

    Coding01 评论0 收藏0
  • Python_Django

    摘要:为了将代码规范,约定俗成将视图放置在项目或应用程序目录中命名为文件中。必须接受字段表示字符串长度不能超过该值,默认的标签最常用的。例,自动添加发布时间。以字符串的形式存在,默认最大长度,可以通过参数设置。用于保存通用唯一识别码的字段。 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重...

    BearyChat 评论0 收藏0
  • web.py中实现类似Django中的ORM的查询效果

    摘要:中的对象查询框架自带了,实现了一些比较强大而且方便的查询功能,这些功能和表无关。实际的模型类比如类定义后,不实例话的情况下就要具备这样的查询效果。 Django中的对象查询 Django框架自带了ORM,实现了一些比较强大而且方便的查询功能,这些功能和表无关。比如下面这个例子: class Question(models.Model): question_text = mode...

    bladefury 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<