Django模型(一)

一、介绍

image-20220929155823965

模型,就是python中的类对应数据库中的表

1.1、ORM

ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写

image-20220918154228986

ORM 把数据库映射成对象

image-20220918154956326

1.2、示例

1.2.1、模型
from django.db import modelsclass Person(models.Model):first_name = models.CharField(max_length=30)last_name = models.CharField(max_length=30)
1.2.2、数据库表
CREATE TABLE myapp_person ("id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,"first_name" varchar(30) NOT NULL,"last_name" varchar(30) NOT NULL
);

说明

  1. 模型类必须继承models.Model
  2. 每个属性对应数据库表中的一个字段
  3. 表名自动使用 应用_类名 的小写(如:polls_question),可以覆盖重写
  4. 如果模型类中没有指定 primary_key ,那么会自动创建一个 id 字段,自增,主键

二、MySQL数据库迁移 

image-20220929154628521

当编写了模型之后,需要将模型应用到数据库中,具体步骤如下:

  1. 创建项目model_study,及子应用model_app

    #创建项目
    $ django-admin startproject model_study
    #进入项目目录创建子应用
    $ python manage.py startapp model_app
    
  2. 配置应用,将模型对应的应用程序添加到项目的settings中:

    INSTALLED_APPS = ['model_app'
    ]
    
  3. 在settings.py中配置正确的数据库连接:

    # mysql
    DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'model_study','USER': 'root','PASSWORD': 'root','HOST': '127.0.0.1','PORT': 3306,}
    }
    

注意

  • 需要安装对应数据库的驱动

    • pip install mysqlclient==2.1.1

    • pip install pymysql

      # __init__.py
      import pymysql
      pymysql.install_as_MySQLdb()
      
  • 需要在mysql数据库中创建数据库model_study

2.1、创建迁移

在项目根目录的cmd中运行:

$ python manage.py makemigrations model_app

备注

  1. model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
  2. 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件

2.2、正式迁移

在根目录的cmd中运行:

$ python manage.py migrate

备注

没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中

三、sqlite3数据库迁移

image-20220929165658059

当编写了模型之后,需要将模型应用到数据库中,具体步骤如下:

  1. 创建项目model_study,及子应用model_app

    #创建项目
    $ django-admin startproject model_study
    #进入项目目录创建子应用
    $ python manage.py startapp model_app
    
  2. 配置应用,将模型对应的应用程序添加到项目的settings中:

    INSTALLED_APPS = ['model_app'
    ]
    
  3. 在settings.py中配置正确的数据库连接:

    # sqlite3
    DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
    }
    

    注意

    • 需要安装对应数据库的驱动
    • 需要在mysql数据库中创建数据库model_study

    3.1、创建迁移

    在项目根目录的cmd中运行:

    $ python manage.py makemigrations model_app
    

    备注

    1. model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
    2. 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件

    3.2、正式迁移

    在根目录的cmd中运行:

    $ python manage.py migrate
    

    备注

    没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中

    四、更新数据库表结构

    image-20220929155039429

    不管是新增模型,还是修改已有模型后,只需要执行行命令即可:

    4.1、创建迁移

    在项目根目录的cmd中运行:

    $ python manage.py makemigrations model_app
    

    备注

    1. model_app是子应用的名称,如果不指定,那么就是对所有 INSTALLED_APPS 中的应用都进行预备迁移
    2. 指定该命令后,在对应的子应用下的 migrations 中会生成一个对应的迁移文件

    4.2、正式迁移

    在根目录的cmd中运行:

    $ python manage.py migrate
    

    备注

    没有添加子应用名,那么就会把django项目中所有的应用都迁移到数据库中

    4.3、设置表名

    在模型中建立内部类Meta设置db_table即可

    # Create your models here.
    class Person(models.Model):first_name = models.CharField(max_length=10)lname = models.CharField(max_length=30)age = models.CharField(max_length=30)class Meta:db_table = 't_person'
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/248249.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】压缩脚本、报警脚本

一、压缩搅拌 要求: 写一个脚本,完成如下功能 传递一个参数给脚本,此参数为gzip、bzip2或者xz三者之一; (1) 如果参数1的值为gzip,则使用tar和gzip归档压缩/etc目录至/backups目录中,并命名为/backups/etc…

Java-并发高频面试题

1.说一下你对Java内存模型(JMM)的理解? 其实java内存模型是一种抽象的模型,具体来看可以分为工作内存和主内存。 JMM规定所有的变量都会存储再主内存当中,再操作的时候需要从主内存中复制一份到本地内存(c…

C++(6) 继承

文章目录 继承1. 继承1.1 什么是继承1.2 C 继承方式1.2.1 基本案例1.2.2 继承权限组合1.2.3 继承中构造函数的说法1.2.4 继承中析构函数的执行顺序1.2.5 继承中变量名称冲突问题1.2.6 继承中函数【重写】 继承 1. 继承 1.1 什么是继承 面向对象程序设计中最重要的一个概念是继…

【linux】复制cp和硬连接、软连接的区别? innode 关系?

1.命令: cp -r [源文件或目录] [目的目录] #复制 ln -s [被链接的文件] [链接的目录/名称] #软连接 ln [被链接的文件] [链接的目录/名称] #硬连接 注:cp -r 会把所有source当作普通文件(regular文件)&#x…

把批量M3U8网络视频地址转为MP4视频

在数字媒体时代,视频格式的转换已成为一项常见的需求。尤其对于那些经常处理网络视频的用户来说,将M3U8格式的视频转换为更常见的MP4格式是一项必备技能。幸运的是,现在有了固乔剪辑助手这款强大的工具,这一过程变得异常简单。下面…

03:华为云管理|云主机管理|云项目实战

华为云管理|云主机管理|云项目实战 安全组配置部署跳板机配置yum源,安装软件包优化系统服务安装配置ansible管理主机 模版镜像配置配置yum源,安装软件包优化系统 网站云平台部署实战华为云的负载均衡 安全组配置 设置安全组 云…

MongoDB常用命令

3.1 案例需求 存放文章评论的数据存放到MongoDB中,数据结构参考如下: 数据库:articledb 3.2 数据库操作 3.2.1 选择和创建数据库 选择和创建数据库的语法格式: use 数据库名称 如果数据库不存在则自动创建,例如&a…

VirtualBox配置OpenEuler虚拟机双网卡使用

VirtualBox配置NAT模式时,在宿主机使用WIFI时,虽然能访问互联网,能正常安装软件,但是本地不能访问虚拟机,但是可以配置另一个host-only模式的网卡,通过双网卡实现本地访问虚拟机的同时也能访问互联网。 安装…

GitBook可以搭建知识库吗?有无其他更好更方便的?

在一个现代化的企业中,知识是一项宝贵的资产。拥有一个完善的企业知识库,不仅可以加速员工的学习和成长,还能提高工作效率和团队协作能力。然而,随着企业不断发展和扩大规模,知识库的构建和管理变得更加复杂和耗时。 |…

c++入门语法—————引用,内联函数,auto关键字,基于范围的for循环,nullptr

文章目录 一.引用1.引例2.注意事项3.应用场景1.做参数(a:输出型参数b:内容较大参数)2.做返回值(a:修改返回值,b:减少拷贝) 4.引用和指针的区别 二.内联函数1.为什么有内联函数2.用法和底层3.特性 三.auto关键字1.基础示…

vue项目如何打包,java项目如何打包

目录 vue项目如何打包 java项目如何打jar包 使用Maven打包为JAR(方式一)视图: 先双击clean再双击package即可打包 使用Maven打包为JAR(方式二)命令: 1、确保你已经安装了Maven,并且配置了相应…

腾讯云轻量应用Ubuntu服务器如何一键部署幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏,在帕鲁的世界,玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活,也…

GLog开源库使用

Glog地址:https://github.com/google/glog 官方文档:http://google-glog.googlecode.com/svn/trunk/doc/glog.html 1.利用CMake进行编译,生成VS解决方案 (1)在glog-master文件夹内新建一个build文件夹,用…

使用vs2022将.net8的应用程序发布为一个单独文件

在使用.NetCore3.1时&#xff0c;可以通过设置以下工程配置文本来将项目发布为一个单独的应用程序文件&#xff1a; <Project Sdk"Microsoft.NET.Sdk.WindowsDesktop"><PropertyGroup><TargetFramework>netcoreapp3.1</TargetFramework><…

React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)

本章内容 目录 一、了解 Diff 算法二、key 值的重要性三、为什么不建议使用 index 做 key 值 上一节我们初步了解了 React中的”虚拟 DOM“ &#xff0c;本节我们来说一说”虚拟DOM“中的”Diff算法“ 一、了解 Diff 算法 在上一篇中&#xff0c;我们有讲到&#xff1a;当 st…

UE5 C++ 读取本地图片并赋值到UI上

目录 结果图 节点样式 主要代码 调试代码 结果图 节点样式 主要代码 &#xff08;注释纯属个人理解&#xff0c;可能存在错误&#xff09; // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h&q…

基于JAVA+SpringBoot+Vue的前后端分离的美食分享推荐平台2

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在当今社会&#xff0…

【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​​​ 目录 归并排序 代码实现&#xf…

vue3-深入组件-透传属性

透传属性 &#xff08;透传 attribute&#xff09; 什么是透传属性&#xff08;透传 attribute&#xff09;? 传递给一个组件&#xff0c;却没有被该组件声明为 props 或 emits 的 attribute 或者是事件监听器&#xff0c;例如 class style id 等。 属性继承 当一个组件以单…

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画&#xff1a;自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画&#xff1a;拿来吧你&#xff01;一个app A对另一个app B通过binder跨进程通信&#xff0c;控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…