栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django 数据模型

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django 数据模型

Django模型类似于java语言中的jpa一样,减少创建数据的数据,简化在开发中数据库中的操作。

from django.db import models
from django.urls import reverse

# Create your models here.


class UserBaseInfo(models.Model):
    id = models.AutoField(verbose_name='编号', primary_key=True)
    username = models.CharField(verbose_name='用户名称', max_length=30)
    password = models.CharField(verbose_name='密码', max_length=20)
    status = models.CharField(verbose_name='状态', max_length=1)
    createdate = models.DateTimeField(
        verbose_name='创建日期', db_column='createDate')

    def __str__(self):
        return str(self.id)

    class Meta:
        verbose_name = '人员基本信息'
        db_table = 'UserBaseInfo4'
字段类型
字段说明对应mysql字段
AutoField自增的主键Int
BooleanField布尔字段Tinyint
CharField字符类型varChar
DateField日期Date
DateTimeField日期时间类型DateTime
IntergetField整数类型Int
TexField长文本Longtext
TimeField时间Time
FloatField浮点数Double
FileField字符类型varChar
ImageField字符类型varChar
DecimalField数值类型Decimal

属性备注:
DecimalField:

  • max_digits:最大位数
  • decimal_places:小数的最大位数
    字段时间类型有auto_now_add和auto_now
字段参数
字段说明
verbose_name字段的显示名称
primary_key设置字段是否为主键
editable是否可编辑
max_length最大长度
blank是否可以为空,默认是false
null是否可以为空,默认是false
default默认值
choices可选值
db_column列名称
db_index是否建立索引
unique是否建立唯一性
error_messages自定义错误信息
validators自定义错误验证
Str

设置模型的返回值

Meta类

用于定义Django模型的行为

字段说明
abstract是否为抽象类
db_table表名
managedDjango会管理表的生命周期和迁移等
ordering返回数据按照那个字段排序
verbose_name模型在后台显示的名称
index_together联合索引
unique_together联合约束
表关系
  • 一对一
    OneToOneField

参数:
to 模型名称
to_field 关联的字段名称
on_delete 删除的配置

字段说明
CASCADE级联删除
PROTECT删除时出错
SET_NULLnull = True是设置null时置空
SET_DEFAULT设置默认值
SET设置为指定的值
DO_NOTHING不做操作
models.OneToOneField()
  • 一对多
    ForeignKey
  • 多对多
    ManyToManyField
配置mysql

配置数据库连接工具,默认是用的sqlite3,这里修改为mysql,并配置了日志。

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'POST': '3306',
        # 取消外键约束
        'OPTIONS': {
            "init_command": "SET foreign_key_checks = 0;",
        },

    }
}
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        }
    },
}

然后生成对应数据表

  1. 生成迁移文件

python manage.py makemigrations

  1. 执行迁移

python manage.py migrate

查询语句

  1. all()
    查询所有的语句
In [1]: from app3.models import *

In [2]: users = UserBaseInfos.objects.all()

In [3]: print(users[0].username)
(0.000) SELECt @@SQL_AUTO_IS_NULL; args=None
(0.000) SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; args=None
(0.000) SELECT `UserBaseInfo4`.`id`, `UserBaseInfo4`.`username`, `UserBaseInfo4`.`password`, `UserBaseInfo4`.`status`, `UserBaseInfo4`.`createDate` FROM `UserBaseInfo4` LIMIT 1; args=()
背景墙
  1. filter()
    删选指定的值,返回一个结果列表
  2. get()
    获取一个结果集,返回多条数据报错。
    users = UserBaseInfos.objects.get(id=1)
    print(users.username)
  1. exclude()
    排除符合条件的语句,返回结果集
操作符含义例子
__gt()大于filter(age__gt=20)
__gte()大于或等于filter(age__gte=20)
__lt()小于filter(age__lt=20)
__lte()小于或等于filter(age__lte=20)
__in()在某个列表filter(age__in=[1,0])
__contains()模糊匹配filter(age__contains=‘张’)
__year()/__month()/__day()日期匹配filter(createdate__year=2011)
  1. values()
    提取对应字段

  2. distinct()

users = UserBaseInfos.objects.distinct().values(‘department’)

新增和更新数据

使用sava()保存更新数据,create()也可新增数据。

users = UserBaseInfos.objects.get(id=1)
    users.username = "Django.js"
    users.save()
删除数据

delete()方法删除数据

F函数和Q函数

F函数可以更新字段,更新之后使用refresh_from_db()

user.salary = F(“salary”) + 1000

Q函数可以支持条件查询

filter(Q(age__gt=30)&Q(salary__gt=5000))

运行原生的SQL

使用django.db.models.Manager.raw()执行SQL,也可以执行带参数的SQL语句,使用[]来传入参数。

users = UserBaseInfos.objects.raw("select * from UserBaseInfo4")
print(users[0].username)
事务

事务的ASID特性:原子性、一致性、隔离性和持久性

Django中事务主要有装饰器方式和with语句。

@transaction.atomic
def trans(request):
	save_id = transaction.savepoint()
	try:
		---
		transaction.savepoint_commit(save_id)
	except:
		transaction.savepoint_rollback(save_id)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号