Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

文章目录

  • Django ORM介绍
    • 1.使用pycharm新建一个Django项目
    • 2.修改settings.py文件中 DATABASES
    • 3.创建APP
    • 4.创建模型
    • 5.操作数据库

Django ORM介绍

Django 模型使用自带的 ORM。
对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。
ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。
ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。
在这里插入图片描述
使用 ORM 的好处:

  • 提高开发效率。
  • 不同数据库可以平滑切换。
    使用 ORM 的缺点:
  • ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行效率会有所降低。
  • 长期写 ORM 代码,会降低编写 SQL 语句的能力。
    ORM 解析过程:
  • 1、ORM 会将 Python 代码转成为 SQL 语句。
  • 2、SQL 语句通过 pymysql 传送到数据库服务端。
  • 3、在数据库中执行 SQL 语句并将结果返回。
    ORM 对应关系表:
    在这里插入图片描述

1.使用pycharm新建一个Django项目

在这里插入图片描述
Application name 可以不填
等到pycharm 创建虚拟环境之后,直接可以点击右上角运行 查看Django项目是否创建成功
在这里插入图片描述
点击链接 出现以下界面就代表创建成功了
在这里插入图片描述
注意: 如果是连接Sql Server 需要另外安装一个包 mssql-django

pip install mssql-django

在这里插入图片描述

2.修改settings.py文件中 DATABASES

DATABASES = {'default': {'ENGINE': 'mssql','NAME': 'library',  # 数据库名称'HOST': '127.0.0.1',  # 地址'PORT': '1433',  # 端口'USER': 'sa',  # 用户名'PASSWORD': '123456',  # 密码'OPTIONS': {'driver': 'ODBC Driver 17 for SQL Server','MARS_Connection': True,},}
}

重新启动如果不报错,说明连接没有问题

3.创建APP

Django 规定,如果要使用模型,必须要创建一个 app。我们使用以下命令创建一个 TestModel 的 app。 starapp 后面接 app名字 pycharm默认是不创建APP的

django-admin startapp bookModel

在pycharm 底部 Terminal 输入即可,创建完成之后 会在项目下多出现一个bookModel文件夹
在这里插入图片描述

4.创建模型

修改bookModel文件夹下的models.py 新增一个类,这个类的属性与数据表一一对应,不需要去SQLserver创建数据表,django 会帮我们创建

from django.db import models
# Create your models here.from django.db import models
class Reader(models.Model):name = models.CharField(max_length=100)reader_id = models.CharField(max_length=50, unique=True)password = models.CharField(max_length=100)address = models.CharField(max_length=200)def __str__(self):return self.name

接下来在 settings.py 中找到INSTALLED_APPS这一项,如下:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','bookModel',  #添加到这
]

在命令行中运行:

python manage.py migrate
python manage.py makemigrations bookModel  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate bookModel   # 创建表结构

当出现以下结果 说明创建成功
在这里插入图片描述
打开SQLserver 会发现数据库多了几张表 其中django默认增添了admin相关的表
在这里插入图片描述
表名组成结构为:应用名_类名(如:TestModel_test)。

5.操作数据库

在目录中添加 testdb.py 文件,并修改 urls.py:

from . import testdb
urlpatterns = [path('admin/', admin.site.urls),path('testdb/', testdb.testdb),]

在testdb.py中添加testdb 方法

def testdb(request):new_reader = Reader.objects.create(name='John Doe',reader_id='16',password='secure_password',address='123 Main St, City')new_reader.save()return HttpResponse("<p>数据添加成功!</p>")

重启django服务器 在浏览器输入127.0.0.1:8000/testdb/
在这里插入图片描述
查看数据库
在这里插入图片描述
提供标准的CRUD 请根据业务需求修改

from django.http import HttpResponse
from django.core import serializers
from django.shortcuts import get_object_or_404from bookModel.models import Reader# 数据库操作def testdb(request):new_reader = Reader.objects.create(name='John Doe',        reader_id='116',        password='secure_password',        address='123 Main St, City'    )new_reader.save()return HttpResponse("<p>数据添加成功!</p>")def selectAllReader(request):all_readers = Reader.objects.all()# 2. 将数据序列化成json格式    data = serializers.serialize('json', queryset=all_readers)# 3. 返回    return HttpResponse(data)def get_reader_by_id(request, reader_id):# 根据read_id 查询数据    reader = Reader.objects.filter(c=reader_id).first()print(reader)  # 检查打印的reader对象    data = serializers.serialize('json', queryset=[reader])return HttpResponse(data)def update_reader(request):try:# 获取要修改的 Reader 对象        reader = Reader.objects.get(pk=1)# 更新属性值        reader.name = "Marxist"        reader.save()  # 保存修改        return HttpResponse("<p>Reader对象已成功更新!</p>")except Reader.DoesNotExist:return HttpResponse("<p>未找到具有该ID的Reader对象。</p>")def delete_reader(request):try:# 获取要删除的 Reader 对象        reader = Reader.objects.get(pk=1)# 删除对象        reader.delete()return HttpResponse("<p>Reader对象已成功删除!</p>")except Reader.DoesNotExist:return HttpResponse("<p>未找到具有该ID的Reader对象。</p>")

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

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

相关文章

C++ Trie树模版 及模版题 || Trie字符串统计

Trie树&#xff1a;用来高效的存储和查找字符串集合的数据结构。 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x &#xff1b; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符串总长度不超过 1…

vue2打包后,接口地址可在打包文件中配置

项目中遇到一个需要&#xff0c;打包后的项目需要部署到多个服务器&#xff0c;所以每次打包都需要修改环境变量的api的接口&#xff0c;先需要直接在打包文件中修改&#xff0c;不用每次都重新打包&#xff1a; 1.在public下创建config文件&#xff1a; window.apiConfig{&q…

OpenHarmony内存泄漏指南 - 解决问题(综合)

本系列文章旨在提供定位与解决OpenHarmony应用与子系统内存泄露的常见手段与思路&#xff0c;将会分成几个部分来讲解。首先我们需要掌握发现内存泄漏问题的工具与方法&#xff0c;以及判断是否可能存在泄漏。接着需要掌握定位泄漏问题的工具&#xff0c;以及抓取trace、分析tr…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

解密威胁:应对.faust勒索攻击的实用解决方案

引言&#xff1a; 在数字犯罪的舞台上&#xff0c;.faust勒索病毒以其狡猾的特征而备受瞩目&#xff0c;其中最为引人注目的之一是其对文件扩展名的变革。这种诡异的舞蹈不仅是攻击者的标志&#xff0c;更是对受害者数据的无情捉弄。本节将深入研究.faust勒索病毒对文件扩展名…

GDB调试技巧实战--chatGPT辅助考察strace原理

想法 本想写一篇strace代码解读的帖子,但是市面上已经有很多介绍strace原理的文章。就不重复造轮子了。还是授人以鱼不如授人以渔,讲讲如何利用GDB+ChatGPT辅助通过实践理解strace主要程序流吧。 既然strace的主要原理是利用ptrace系统函数控制tracee(被调试者) 及 wait4等…

回溯算法part03 算法

回溯算法part03 算法 今日任务 ● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串 1.leetcode 39. 组合总和 https://leetcode.cn/problems/combination-sum/ class Solution {List<List<Integer>> resultnew ArrayList<>();List<Integer> pat…

JS函数调用的this指向与apply,call,bind调用模式

1、函数调用的四种模式与this指向 普通函数调用&#xff1a;this指向全局对象对象方法调用&#xff1a;this指向该调用的对象构造函数调用&#xff1a;this指向构造函数new的对象call,apply和bind间接调用&#xff1a;显式绑定this&#xff0c;传入的第一个参数绑定的对象 2、…

静态网页设计——天行九歌(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a;https://www.bilibili.com/video/BV1de411m7y4/?vd_source5f425e0074a7f92921f53ab87712357b 源码&#xff1a;https://space.bilibili.com…

java回溯算法、最短路径算法、最小生成树算法

回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。 最短路径算法 从某顶点出发&#xff0c;沿图的边到达另一顶点所经过的路径中…

高通开发系列 - toolchain交叉编译器编译kernel以及生成boot镜像

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景概述分析过程generate_defconfig.sh脚本环境准备合并其他几个配置文件开始编译生成dtb镜像

【Python】Excles横向merge合并到一个sheet中

将文件夹内的多个excel合并在一个excel的一个sheet中&#xff0c;按照列“X”和列“Y”进行横向merge。 import os import pandas as pd# 设置文件夹路径 folder_path rD:\itm\excle# 获取文件夹下所有的 Excel 文件 all_files os.listdir(folder_path) excel_files [f for…

Python-PyQt5树莓派上位机

Python-PyQt5树莓派上位机 一个使用PythonQT设计的树莓派的上位机&#xff0c;功能大概如下 1.笔记本电脑与树莓派的通讯是否成功显示&#xff08;给个信号显示判断是否通讯成功&#xff09;&#xff1b; 2.阈值的设置显示&#xff1b; 3.图像成像的显示&#xff1b; 4.是否发生…

【python爬虫】如何开始写爬虫?来给你一条清晰的学习路线吧~

记录一下我自己从零开始写python爬虫的心得吧&#xff01; 我刚开始对爬虫不是很了解&#xff0c;又没有任何的计算机、编程基础&#xff0c;确实有点懵逼。从哪里开始&#xff0c;哪些是最开始应该学的&#xff0c;哪些应该等到有一定基础之后再学&#xff0c;也没个清晰的概…

模糊综合评价

第一步&#xff1a;确定评语指标集 评语集 第二步&#xff1a;求出模糊评价矩阵P,往往结合具体数据 通常用频率法确定隶属度 用变异系数法确定权重 前几篇博客有讲变异系数法 移步 模糊合成

【hcie-cloud】【19】云原生详细介绍、华为云Stack中云原生服务简介

文章目录 前言云原生简介云计算和云原生云原生的特征云原生技术架构云原生的定义云原生关键技术 - 容器&不可变基础设施1、 容器2、微服务3、服务网格4、DevOps5、 不可变基础设施6、 声明式API 云原生关键技术 - 申明式API 华为云Stack中云原生服务简介构建以应用为中心的…

Docker的基本概念和优势

Docker是一种轻量级的容器化平台&#xff0c;它可以将应用程序及其依赖项打包为一个独立的容器&#xff0c;并在任何环境中快速部署和运行。以下是Docker的基本概念和优势&#xff1a; 容器&#xff1a;Docker使用容器来打包应用程序及其所有依赖项&#xff0c;包括运行时环境、…

springboot 拦截器 interceptorRegistration excludePathPatterns的url该怎么写?

以这段请求为例 interceptorRegistration.addPathPatterns("/**").excludePathPatterns("/css/*","/js/*","/img/*","/index","/login");在applicaiton.yml中配置了context-path server:port: 8080servlet:cont…

Day1Qt

1、实现登录窗口界面 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QIcon>//图标 #include <QLabel>//标签类 #include <QMovie>//动态类 #include <QLineEdit>//行编辑类 #include <QPushButton>…

JavaScript实用库汇总

记录一些比较常用的功能实用库 1、处理时间的库 dayjs &#xff1a;Day.js中文网 (fenxianglu.cn) date-fns &#xff1a; date-fns - modern JavaScript date utility library moment.js &#xff1a; 首页 | Moment.js 中文文档 (bootcss.com) luxon &#xff1a; Home …