Python 框架学习 Django篇 (三) 链接数据库

news2024/11/18 21:30:08

只要你是做后端开发的,那么就离不开各种数据库,Django框架对各种数据库都非常友好,比如常见的PostgreSQL、MySQL、SQLite、Oracle,django都对他们提供了统一调用api,我们这里主要使用mysql数据库作为演示

 一、ORM机制

ORM机制,又称为对象关系映射,简单来说就是通过定义python文件中的class类,然后通过ORM将python代码转换成sql语句,再通过pymysql库链接到mysql数据库,执行sql语句

 

 1、ORM 解析过程

1、ORM 会将 Python 代码转成为 SQL 语句。
2、SQL 语句通过 pymysql 传送到数据库服务端。
3、在数据库中执行 SQL 语句并将结果返回。

 2、python代码与sql语句关系图

 二、基本使用

1、准备mysql数据库

#部署容器
docker run --name mysql8 \
-p 30013:3306 \
-d  \
-v /home/data/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /home/data/mysql/data:/var/lib/mysql \
-v /home/data/mysql/log:/logs \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always  mysql:8.0 \
--lower_case_table_names=1

#创建数据库
create database paas default charset=utf8;  

#授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

ORM机制无法创建数据库级别操作,只能创建表

2、安装pymysql库

pip3 install pymysql
pip3 install cryptography

3、配置django项目指定数据库

vi Django_demo\Django_demo\settings.py

#找到DATABASES 修改配置
DATABASES = { 
    'default': 
    { 
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'paas',                          # 数据库名称
        'HOST': '101.43.156.78',                  # 数据库地址
        'PORT': 3306,                            # 端口 
        'USER': 'root',                          # 数据库用户名
        'PASSWORD': '123456',                    # 数据库密码
    }  
}

在settings.py的同级目录下找到__init__.py 文件添加

vi  Django_demo\Django_demo\__init__.py

# 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()

4、创建新项目

django-admin startapp paas

5、添加数据库表  模型

vi  Django_demo/paas/models.py

from django.db import models

#相当于是定义了表中存储数据的字段
class PaasInfo(models.Model):
    # 集群名称
    ClusterName = models.CharField(max_length=200)

    # node主机数量
    NodeSum = models.CharField(max_length=200)

    # prometheus地址
    PrometheusAddress = models.CharField(max_length=200)

配置说明

class PaasInfo     #定义数据表的名称  class 等同于数据库中的表


ClusterName = models.CharField(max_length=200)

ClusterName        #定义数据表中字段的名称 
models.CharField   #字段类型为字符串 (varchar)
max_length=200     #字段数据长度最大为200字节

6、添加联系数据库表

vi Django_demo/paas/apps.py

#这里的name相当于是当前应用的唯一标识
class CommonConfig(AppConfig):
    name = 'paas'  




#说明
CommonConfig 类是一个继承自 AppConfig 的应用程序配置类。

这个类的作用是为定义的应用程序提供配置信息。在 CommonConfig 类中,name 属性被设置为 'paas',表示该应用程序的名称是 "paas"。

通过在应用程序中定义一个配置类,您可以为应用程序指定自定义的配置参数。这些配置参数可以在 Django 的设置文件中进行进一步的配置,例如指定模型文件、URL 路由和静态文件位置等。

对于一个简单的 Django 应用程序来说,name 属性的设置是必需的,它用于唯一标识应用程序并在 Django 项目中进行引用。其他的配置参数包括 verbose_name 属性,用于指定应用程序的显示名称。

 vi Django_demo/Django_demo/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
     #添加如下配置,也可以直接写paas
    'paas.apps.CommonConfig',  
]

这里有个小区别说明一下,上面的'paas.apps.CommonConfig',  也可以写错'paas',

通过直接添加 paas,  Django 将使用默认的应用程序配置类来初始化该应用程序。通过添加 'paas.apps.CommonConfig',可以指定自定义的应用程序配置类,并且可以在其中定义更多的配置参数和行为。

7、测试model配置并生成更新脚本

#命令大意为 查看paas应用下的models.py 定义了什么
#将定义的语句转换成操作数据库的脚本文件 
python manage.py makemigrations paas 

返回

Migrations for 'paas':
  paas\migrations\0001_initial.py
    - Create model PaasInfo

上面获取到的信息中Django_demo/paas/migrations/0001_initial.py 是我们基于定义的model获取到的用于创建数据库和表的一个python语句

8、运行数据库操作脚本

python manage.py migrate

返回

Operations to perform: 
  Apply all migrations: admin, auth, contenttypes, paas, sessions 
Running migrations:
  Applying contenttypes.0001_initial... OK 
  Applying auth.0001_initial... OK 
  Applying admin.0001_initial... OK 
  Applying admin.0002_logentry_remove_auto_add... OK 
  Applying admin.0003_logentry_add_action_flag_choices... OK 
  Applying contenttypes.0002_remove_content_type_name... OK 
  Applying auth.0002_alter_permission_name_max_length... OK 
  Applying auth.0003_alter_user_email_max_length... OK 
  Applying auth.0004_alter_user_username_opts... OK 
  Applying auth.0005_alter_user_last_login_null... OK 
  Applying auth.0006_require_contenttypes_0002... OK 
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying paas.0001_initial... OK
  Applying sessions.0001_initial... OK

9、查看数据

#登录paas数据库
use paas

#查看paas库下的表
show tables;

#查看表结构
desc paas_paasinfo;

如果以后我们修改了Models.py 里面的库表的定义,都需要再次运行 python manage.py makemigrations common 和 python manage.py migrate 命令,使数据库同步该修改结果

三、Django admin页面

Django提供了一个管理员操作界面可以方便的 添加、修改、删除你定义的 model 表数据

1、创建超级用户

python manage.py createsuperuser


#填写
用户         root
邮箱         123@qq.com
密码         12345678
再次输入密码  12345678

2、注册应用model

vi Django_demo/paas/admin.py

from django.contrib import admin

# Register your models here.
from .models import PaasInfo

admin.site.register(PaasInfo)

3、访问管理平台

启动服务

python manage.py runserver

访问页面

http://127.0.0.1:8000/admin/

4、添加UI

pip3 install django-simpleui

vi Django_demo/Django_demo/settings.py

INSTALLED_APPS = [

    'simpleui',   #添加到第一行

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'paas',
]

5、再次访问

6、添加测试数据

7、验证

select * from paas_paasinfo;

四、数据库读取

我们在上面实现了链接数据库并插入数据,如果我们想要将数据从数据库读取出来,并且打印到页面上,应该怎么操作呢,下面我们尝试实现访问/sales/SelectHost 路径时返回数据库中PaasInfo 表下的所有数据

1、添加子应用下路由文件

vi Django_demo/Django_demo/urls.py

from django.contrib import admin
from django.urls import path


#添加
from django.urls import  include   

urlpatterns = [
    path('admin/', admin.site.urls),

    #在主路由上添加,当请求sales开头时都会把请求交给paas应用下的urls
    path('sales/', include('paas.urls')),
]

添加后就允许子应用添加自己的路由配置了

2、定义视图

vi Django_demo/paas/views.py

from django.http import HttpResponse


from .models import PaasInfo


def listcustomers(request):
    #拿到我们之前定义的表的模型函数,请求后返回一个包含所有数据的QuerySet对象
    #每行数据都是一个dict, key的名称是字段名  Value是值
    qs = PaasInfo.objects.values()

    # 定义返回字符串
    retStr = ''
    for customer in  qs:
        for name,value in customer.items():
            retStr += f'{name} : {value} | '

        # <br> 表示换行,在返回值中带上换行,那么页面上显示也会生效
        retStr += '<br>'

    return HttpResponse(retStr)

3、新增子路由

vi Django_demo/paas/urls.py

from django.urls import path



from .views import listcustomers
urlpatterns = [
    #paas应用上的路由只需要定义自己路由的部分即可
    path('SelectHost/',listcustomers ),

]

4、测试访问

http://127.0.0.1:8000/sales/SelectHost/

五、过滤数据

有的时候,我们需要根据过滤条件查询部分客户信息

比如,当用户在浏览器输入 http://127.0.0.1:8000/sales/SelectHost/?NodeSum=123123

可以查询到node主机数量为123123台的信息,实现他的方法是添加filter方法进行过滤

 vi Django_demo/paas/views.py

def listcustomers(request):
    #获取表全量数据
    qs = PaasInfo.objects.values()

    #检查url中是否有参数NodeSum
    #如果没有值,则返回给ph值为后面的None
    ph =  request.GET.get('NodeSum',None)

    #判断如果有的话, 就将值赋予给字段进行筛选后赋值覆盖全量数据
    if ph:
        qs = qs.filter(NodeSum=ph)

    # 循环遍历全量数据并打印到页面
    retStr = ''
    for customer in  qs:
        for name,value in customer.items():
            retStr += f'{name} : {value} | '
        # <br> 表示换行
        retStr += '<br>'

    return HttpResponse(retStr)

测试

http://127.0.0.1:8000/sales/SelectHost/?NodeSum=123123

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

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

相关文章

报考阿里云acp认证,你得到的是什么?

放眼全球能够和亚马逊AWS、微软Azure竞争的&#xff0c;国内也就只有阿里云了。 阿里云目前稳居国内云计算市场第一&#xff0c;比排后面5名同行市场占有率的总和还要多&#xff0c;全球云计算市场&#xff0c;阿里云目前排名第3位。 阿里云的市场占有率说明市场对于阿里云产…

许战海战略文库|我们的建议:华彬集团改名战马饮料集团

摘要&#xff1a;战马未能有效借势红牛,市场份额不及东鹏特饮。战马要走出当下面临的窘境,需要将华彬集团改名为战马饮料集团&#xff0c;借势红牛加强战马主品牌的认知建设构建战马饮料的产品矩阵;组建战马独立销售网络。 许战海咨询认为&#xff1a;过度差异化造成华彬集团快…

肿瘤科常用评估量表汇总,建议收藏!

根据肿瘤科医生的量表使用情况&#xff0c;笔者整理了10个肿瘤科常用量表&#xff0c;可在线评测直接出结果&#xff0c;可转发使用&#xff0c;可生成二维码使用&#xff0c;可创建项目进行数据管理&#xff0c;有需要的小伙伴赶紧收藏&#xff01; 肿瘤患者的ECOG评分标准 肿…

手机流量卡经营商城小程序的作用是什么

流量卡成为很多用户的选择&#xff0c;同时市场中也出现了不少流量卡卖家&#xff0c;基于多种形式开展生意。然而虽然市场需求度高&#xff0c;但流量卡经营难题也不少。 流量卡客户具有高忠诚度&#xff0c;然而入驻线上第三方平台&#xff0c;客户属于平台&#xff0c;无法…

檀香香料经营商城小程序的作用是什么

檀香香料有安神、驱蚊、清香等作用&#xff0c;办公室或家庭打坐等场景&#xff0c;都有较高的使用频率&#xff0c;不同香料也有不同效果&#xff0c;高品质香料檀香也一直受不少消费者欢迎。 线下流量匮乏&#xff0c;又难以实现全消费路径完善&#xff0c;线上是商家增长必…

grafana v10.1版本设置告警

1. 相关概念概述 如图所示&#xff0c;点击切换菜单标志&#xff0c;可以看到警报相关子选项。 警报规则&#xff1a;通过PromQL语句定义告警规则&#xff0c;即达到怎样的状态触发告警。 联络点&#xff1a; 设置当警报规则实例触发时&#xff0c;如何通知联系人&#xff0c;…

索引优化与查询优化(补充篇)

其他优化策略 exist和in的区别 选择的标准&#xff1a;小表驱动大表 SELECT *FROM A WHERE cc IN (SELECT cc FROM B)SELECT *FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.ccA.cc)当A小于B时&#xff0c;用EXISTS。因为EXISTS的实现&#xff0c;相当于外表循环&#xff0…

猜数字游戏(Rust实现)

文章目录 游戏说明游戏效果展示游戏代码游戏代码详解生成神秘数字读取用户输入解析用户输入进行猜测比较 游戏说明 游戏说明 游戏运行逻辑如下&#xff1a; 随机生成一个1-100的数字作为神秘数字&#xff0c;并提示玩家进行猜测。如果玩家猜测的数字小于神秘数字&#xff0c;则…

智慧河湖方案:AI赋能水利水务,构建河湖智能可视化监管大数据平台

一、方案背景 我国江河湖泊众多&#xff0c;水系发达。伴随着经济社会快速发展&#xff0c;水生态水环境问题成为群众最关注的民生议题之一。一些河流开发利用已接近甚至超出水环境承载能力&#xff0c;一些地区废污水排放量居高不下&#xff0c;一些地方侵占河道、围垦湖泊等…

Apache SeaTunnel Web 功能正式发布!

Apache SeaTunnel Web 功能正式发布&#xff01; 在大数据技术的不断进步之下&#xff0c;Apache SeaTunnel 成为了众多开发者和企业关注的焦点。今天&#xff0c;我们很高兴地宣布&#xff1a;Apache SeaTunnel Web功能已正式发布&#xff0c;带来了前所未有的易用性和效率。…

手把手带你使用VSCode 搭建 STM32开发环境!

首先附上一张VS Code图一直都喜欢这种&#xff0c;黑色主题感觉高大上。 一、需要的软件和工具。 下载最新版VS Code: 安装好插件&#xff0c;具有良好的代码补全与调试功能。 “ VS Code下载地址&#xff1a;https://code.visualstudio.com/ ” 下载 LLVM&#xff1a;用于代码…

DeFi世界 MXT脱颖而出 利好不断

​​MixTrust希望成为用户在Web3世界的专用金融平台&#xff0c;注重为用户提供个性化的金融服务。而WorldCoin的愿景则是建设一个全球最大的、公平的数字身份和货币体系&#xff0c;强调构建一个涵盖全球范围的身份认证和货币交易系统。 扩展性 在扩展性方面&#xff0c;双方…

操作系统体系结构和OS

1.冯诺依曼计算机体系 关于冯诺伊曼系统&#xff0c;在这里我只是简单讲一讲&#xff0c;更加详细的内容可以看我的计算机组成系列。 常见的笔记本、台式机&#xff0c;不常见的服务器、工作站&#xff0c;大部分都遵守“冯诺依曼体系”&#xff0c;因此该计算机体系就是现代…

易点易动设备管理系统帮助生产企业提升设备巡检效率

在现代制造业中&#xff0c;设备的正常运行对于生产企业的成功至关重要。然而&#xff0c;设备巡检是确保设备安全性和可靠性的关键环节&#xff0c;但却常常耗费大量时间和资源。为了解决这个问题&#xff0c;许多企业采用了现代化的设备管理系统&#xff0c;其中易点易动设备…

简单谈谈我参加数据分析省赛的感受与体会

数据分析省赛的感受与体会 概要考试前的感受与体会考试注意事项小结 概要 大数据分析省赛指的是在省级范围内举办的大数据分析竞赛活动。该竞赛旨在鼓励和推动大数据分析领域的技术创新和人才培养&#xff0c;促进大数据技术与应用的深度融合&#xff0c;切实解决实际问题。参…

通讯协议学习之路:有线通讯协议总览

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 一、…

【ELK使用指南 2】常用的 Logstash filter 插件详解(附应用实例)

Logstash filter 一、logstash filter过滤插件的常用模块简介二、grok 正则捕获插件2.1 grok插件的作用2.2 内置正则表达式2.3 自定义正则表达式 三、mutate 数据修改插件3.1 mutate插件的作用3.2 常用的配置选项3.3 mutate插件应用实例 四、multiline 多行合并插件4.1 multili…

哈希表(拉链法)代码模板

这里也是用数组模拟链表 //拉链法 //模拟散列表 在算法题中一般只有添加和查询不会有删除 //如果真的要删除也不是真正的删除而是打上一个标记 //mod的这个数最好取大于数据范围的第一个质数 #include<iostream> #include<cstring> using namespace std; const in…

“1688商品评论接口:打造完美电商口碑的秘密武器!“

1688商品评论接口是一种供卖家使用的接口&#xff0c;可以让卖家通过该接口维护商品的评论信息&#xff0c;包括评论内容、评分、评论时间等等。 通过使用该接口&#xff0c;卖家可以方便地管理商品的评论信息&#xff0c;包括查看、修改、删除评论等操作。同时&#xff0c;该…

屏幕截图软件Snagit 2023 mac中文特点介绍

Snagit 2023 mac是一款屏幕截图和视频录制软件&#xff0c;它可以帮助用户快速捕捉屏幕上的任何内容&#xff0c;并将其编辑、标注和共享。 Snagit 2023 软件特点 多种截图模式&#xff1a;支持全屏截图、窗口截图、区域截图、延时截图等多种截图模式&#xff0c;满足不同用户…