django使用mysql数据库

news2024/11/18 20:33:31

Django开 发操作数据库比使用pymysql操作更简单,内部提供了ORM框架。
下面是pymysql 和orm操作数据库的示意图,pymysql就是mysql的驱动,代码直接操作pymysql ,需要自己写增删改查的语句
django 就是也可以使用pymysql、mysqlclient作为驱动,但是目前对mysqlclient的支持更好,在驱动的基础只上封装了orm框架,不用直接去写sql,是操作更简单了。
在这里插入图片描述

1、安装第三方模块

pip install mysqlclient

我的是windows环境,这样安装的时候报错,我们需要先下载需要先下载mysqlclient whl文件
下载地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
或者https://pypi.org/project/mysqlclient/#files
找对对应的python版本下载,我的是3.7就下载这个
在这里插入图片描述
下载后,放到一个目录,cmd 进入到该目录,再执行

pip install mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl

就可以安装成功了。

2、ORM

ORM可以帮助我们做两件事:

  • 创建、修改、删除数据库中的表(不用你写SQL语句)。[无法创建数据库],数据库我们使用其它工手动创建
  • 操作表中的数据(不用写SQL语句)

django连接数据库

在settings.py中配置mysql

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'unicom',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '10.172.3.171',
        'PORT': 3306,
    }
}

创建表

在app01目录下的models.py 中写一个类,类名是UserInfo, 那么表面就会是app01_userinfo,django会自动加上app的名字
字段 通过models来创建,选择不同的字段类型,常用的字段类型有:

CharField 字符型
IntegerField 整形
DecimalField 浮点型
DateField 日期类型,只包含年月日
DateTimeField 日期类型,包含年月日时分秒
BigIntegerField 长整型
SmallIntegerField 小整型

from django.db import models
class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

在app01下面的models.py中创建一个UserInfo的类,必须继承models.Model
django 会帮我们自己创建一个表名为app01_UserInfo的表,包含字段name, password,age
相当于执行下面语句
create table app01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
);
每个表都会自动给创建id列

执行命令创建数据库表: 注意app要先注册

py -3 manage.py makemigrations
py -3 manage.py migrate

如果已经手动创建了admin表的,要用orm 来连接数据库可以,又不希望django改变表明,指定数据表名称,通过内部类 Meta指定表名

from django.db import models

class admin(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

    # 添加一个时间字段
    create_time = models.DateTimeField(null=True)

    class Meta:
        db_table = 'admin'

在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:

  • 手动输入一个值。
  • 设置默认值
age=mode1s.IntegerField(default=2)
  • 允许为空
data=models.IntegerField(null=True, blank=True )

对表的操作

一般是在实现的函数中来操作数据库
在views.py中要导入 from app01 import models
查询类

models.UserInfo.objects.all()     #查询数据库中所有内容,返回的是[obj,obj,obj],一行数据一个对象
models.UserInfo.objects.filter(id=nid).first()     #根据条件查询,只获取第一个对象

对字符串的查询

models.PrettyNum.objects.filter(mobile='136')                                 #等于136
models.PrettyNum.objects.filter(mobile__startswith='136')                     #以136开头
models.PrettyNum.objects.filter(mobile__endswith='888')                       #以888结尾
models.PrettyNum.objects.filter(mobile__contains='136')                       #包含136

对于数字的查询

models.PrettyNum.objects.filter(id=12)       #等于12
models.PrettyNum.objects.filter(id__gt=12)    #大于12
models.PrettyNum.objects.filter(id__gte=12)    #大于等于12
models.PrettyNum.objects.filter(id__lt=12)    #小于12
models.PrettyNum.objects.filter(id__lte=12)    #小于等于12

查询支持两种不同的写法

models.PrettyNum.objects.filter(id=3,mobile='12312341234')

data_dict = {'mobile':'13413241234','id':3}
models.PrettyNum.objects.filter(**data_dict)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?

目录 1 EXCEL里如何显示序号? 2 如何重新排序? 3 怎么取得排序后的序号? 3.1 rank() 的序号可能不连续 3.2 方法2:SUMPRODUCT((C7>C$7:C$12)/COUNTIF(C$7:C$12,C$7:C$12))1 EXCEL里如何显示序号?如何重新排序…

A Survey of Embodied AI: From Simulators to Research Tasks 论文阅读

论文信息: 题目:A Survey of Embodied AI: From Simulators to Research Tasks 作者:Jiafei Duan, Samson Yu 来源:arXiv 时间:2022 Abstract 通过评估当前的九个具体人工智能模拟器与我们提出的七个功能&#xff0…

redis的事务、redis持久化方案、Java操作redis数据库

五、redis的事务 开启事务: 要等左边的提交事务,右边才能拿到修改后的值 本来name不能增加,会报错,但是事务中没提交不知道错 此时提交数据: redis事务将成功的正常提交,失败的才回滚,所以不具备…

C++源码Cmake生成各架构的库

网上一般的教程都是手写C源码进CMakeList 例如: add_executable (main a.cpp b.cpp a/c.cpp ... ) 这种写法太蠢了,不适合项目多层级目录使用 遍历所有文件夹 下面的代码是Cmake代码,一开始看到的时候我也是震惊的,但事实就是它…

2023年性价比电脑硬件主机推荐|电脑党必备硬件选购攻略

在自主搭建电脑变得流行且显卡价格飙升的这个时代,我想给大家推荐一款特别的产品——NUC(Next Unit of Computing)。 NUC是Intel所推出的一种「ITX台式机」,截止目前已经迭代了很多型号,比如之前我买过的猛兽峡谷&…

Flink读取mysql数据库(java)

代码如下: package com.weilanaoli.ruge.vlink.flink;import com.ververica.cdc.connectors.mysql.source.MySqlSource; import com.ververica.cdc.connectors.mysql.table.StartupOptions; import com.ververica.cdc.debezium.JsonDebeziumDeserializationSchema; import org…

夏日暴雨,6大安全应对攻略,让我们一起做好防范

夏季暴雨来袭,我们必须高度警惕!短时间的强降雨可能导致积水、山区滑坡、城市内涝等问题,给社会和经济发展带来严重影响。今天,让我们一起探讨一些有效的防范措施,确保个人安全与减少灾害损失。关注天气预警&#xff0…

IC秋招| 秋招怎么做准备,这份攻略请收下!

近期大家关注的就是秋招了,如今一些企业已经开启了提前批招聘,不少同学已经投递了简历,但内心还是非常焦虑,那么今年的秋招到底该如何准备呢? 简历投递思路建议 刚开始对大厂没有把握的话,可以先约初创或…

SWAT模型【建模方法、实例应用、高级进阶技能】

查看原文>>>SWAT模型【建模方法、实例应用、高级进阶技能】 【内容简述】: 【其它相关推荐】: 一维二维水动力模拟、水质建模、复杂河网构建技术在环境影响评价、防洪评价与排污口论证等实际项目中的应用 基于R语言的水文、水环境模型优化技…

黑客滥用 Google AMP 进行规避性网络钓鱼攻击

近日,有安全研究人员警告称,有越来越多的网络钓鱼活动利用谷歌加速移动页面(AMP)绕过电子邮件安全措施,进入企业员工的收件箱。 谷歌AMP是由谷歌和30个合作伙伴共同开发的一个开源HTML框架,旨在加快网页内容在移动设备上的加载速…

剑指 Offer 54. ! 二叉搜索树的第k大节点 (考察二叉树的中序遍历)

剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。 我的思路是:用一个全局arrayList不断收集“逆向”中序遍历该搜索二叉树所需要的答案 class Solution {int res, k;public int kthLargest(TreeNode root, int …

太牛了,h2oGPT直接操作本地PDF、Excel、Word、图像、等文件

h2o项目简介 查询和总结您的文档,或者只是使用 h2oGPT(一个 Apache V2 开源项目)与本地私有 GPT LLM 聊天。项目地址https://github.com/h2oai/h2ogpt测试体验地址https://gpt.h2o.ai/主要功能 任何文档的私人离线数据库(PDF、Ex…

Linux安装显卡驱动、annaconda和CUDA(超详细)

Windows版本的annaconda安装请见:Windows版本的annaconda安装 Windows版本的CUDA安装请见:Windows版本的CUDA安装 目录 一、安装显卡驱动 1.查询系统中是否安装了显卡驱动 2.查询显卡型号并选择安装的驱动版本 3.安装驱动 二、安装annaconda 三、…

如何为公司选择合适的工时管理系统?

近年来,越来越多的企业将工作外包、提供灵活的工作时间和聘用远程员工,因此对时间跟踪软件的需求也在不断增长。企业需要了解员工如何度过工作时间,否则可能会让企业蒙受损失。 为确保物有所值,在选择工时管理系统时可参考以下步…

EXCEL, 用if({1,0,0} ...) 实现把给定的区域,输出为任意你想要的矩阵,数组区域!

目录 1 原材料:这样的一个区域 工具 if({1,0,0}) 数组公式 1.1 原始数据 1.2 原理 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.1 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.2 原理1: if 数组原理&#…

探寻AI大模型平台之巅——文心千帆

目录 前言1. 何为文心千帆2. 核心亮点2.1 第三方大模型2.2 Prompt模板2.3 插件编排2.4 安全可靠 3. 一站式服务3.1 数据管理3.2 数据标注3.3 数据处理3.4 数据训练3.5 模型纳管3.5.1 模型评估3.5.2 模型压缩 3.6 服务发布 总结 前言 众多AI大模型不断涌现,一时不知…

小乌龟(TortoiseGit)连接GitLab

目录 🍟写在前面 🍟实验目标 🍟安装gitlab 🍿1、安装依赖 🍿2、下载清华gitlab包 🍿3、安装gitlab 🍿4、修改配置文件 🍿5、管理命令 🍟访问gitlab 🍟界面设置…

rem适配方法

rem适配案例: 高度适配,现在是写死的 在不同的屏幕下进行适配 根据不同设备适配不同页面的实施方案有两种 如果是在320像素字体下,字体是多大 如果在750像素下屏幕是多大 比例就是2rem 先拿一个标准的稿件算rem 我们等比例缩放rem的值是怎…

【项目 进程 9】2.19 信号概述 2.20 kill、raise、abort函数

文章目录 2.19 信号概述信号的概念Linux信号一览表信号的5种默认处理动作corecore文件权限及位置设置 2.20 kill、raise、abort函数(给进程发信号) 2.19 信号概述 信号的概念 Linux信号一览表 共62种信号。 SIGKILL:所有进程不包括僵尸进程…

Flexbox

Flexbox 一、什么是 Flexbox ?二、Flexbox 知识点2.1、Flex Container(容器)2.1.1、轴2.1.2、添加flex支持2.1.3、flex-direction(主轴向)2.1.3.1、row 横向2.1.3.2、row-reverse 横向翻转2.1.3.3、column 纵向2.1.3.4、column-r…