Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

news2024/11/18 21:49:07

文章目录

  • 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_404

from 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.coloradmin.cn/o/1367909.html

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

相关文章

【动态代理详解】

文章目录 1. 关于代理1.1 代理的概述1.1.1 什么是动态代理1.1.2 动态代理能做什么 1.2 什么是代理1.2.1 生活中的代理1.2.2 为什么要找中介&#xff1f; 1.3 开发中的代理模式&#xff08;代理&#xff09;1.3.1 使用代理模式的作用 1.4 实现代理的方式 2. 静态代理2.1 什么是静…

华为ipv4+ipv6双栈加isis多拓扑配置案例

实现效果&#xff1a;sw1中的ipv4和ipv6地址能ping通sw2中的ipv4和ipv6地址 R2-R4为存IPV4连接&#xff0c;其它为ipv6和ipv4双连接 sw1 ipv6 interface Vlanif1 ipv6 enable ip address 10.0.11.1 255.255.255.0 ipv6 address 2001:DB8:11::1/64 interface MEth0/0/1 inter…

OpenHarmony - 基于ArkUI框架实现日历应用

前言 对于刚刚接触OpenHarmony应用开发的开发者&#xff0c;最快的入门方式就是开发一个简单的应用&#xff0c;下面记录了一个日历应用的开发过程&#xff0c;通过日历应用的开发&#xff0c;来熟悉基本图形的绘制&#xff0c;ArkUI的组件的使用&#xff0c;UI组件生命周期&a…

ES6(一部分)未完...

文章目录 ES61.ES6 let声明变量2.ES6 const声明常量3.变量解构赋值3-1解构对象3-2解构数组3-3字符串解构 4.模板字符串5.字符串扩展5-1 include函数5-2 repeat函数&#xff08;重复&#xff09; 6.数值扩展6-1二进制和八进制表示法6-2isFinite 与 isNaN方法6-3islnteger方法6-4…

泽攸科技ZEM20台式扫描电镜低真空下的应用案例

低真空扫描电子显微镜是显微技术领域的重要分支&#xff0c;与传统的高真空扫描电子显微镜相比&#xff0c;低真空电镜对含水、多孔、不耐电子束烧伤和不适合喷金处理的样品进行直接观测并具有更好的效果&#xff0c;对于生物样品而言低真空电镜比高真空电镜更具有优势&#xf…

【sklearn练习】preprocessing的使用

介绍 scikit-learn 中的 preprocessing 模块提供了多种数据预处理工具&#xff0c;用于准备和转换数据以供机器学习模型使用。这些工具可以帮助您处理数据中的缺失值、标准化特征、编码分类变量、降维等。以下是一些常见的 preprocessing 模块中的功能和用法示例&#xff1a; …

Mac/Linux虚拟机CrossOver2024新版下载使用教程

CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件&#xff0c;该软件可以让用户在mac是上直接运行windows软件&#xff0c;本文为大家带来的是CrossOver Mac版安装教程&#xff01; CrossOver Mac-安装包下载如下&#xff1a;http…

【鸿蒙4.0】harmonyos Day 03

一.ArkUI组件-Text 1.Text:文本显示组件 语法&#xff1a;Text(content?:string|Resource) string格式&#xff0c;直接填写文本内容 Text(我是bug天选之子) Resource格式&#xff0c;读取本地资源文件 Text($r(app.string.width_label)) "app.string.width_label&q…

LUT预设.cube格式PR/达芬奇/FCP/剪映等视频电影调色预设LUTs

对于将标准镜头转换为让人想起高端电影的视觉冲击场景至关重要。这些LUT经过专业设计&#xff0c;以模仿电影行业中的电影质量、深度和情感&#xff0c;使其成为电影制作人、摄像师和内容创作者的理想选择&#xff0c;希望为你的作品带来专业的电影色彩。 电影LUT的类别&#…

Hyperledger Fabric 架构概览

fabric 版本 v2.4.1 超级账本 Fabric 自诞生以来已经发布了两个主要版本&#xff1a;1.0 系列版本&#xff08;2017 年 7 月&#xff09;和 2.0 系列版本&#xff08;2020 年 1 月&#xff09;。2016 年 9 月&#xff0c;Fabric 发布了 v0.6.0 预览版本&#xff0c;通过这一版本…

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中&#xff0c;运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符&#xff0c;以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…

HarmonyOS@State装饰器:组件内状态

State装饰器&#xff1a;组件内状态 State装饰的变量&#xff0c;或称为状态变量&#xff0c;一旦变量拥有了状态属性&#xff0c;就和自定义组件的渲染绑定起来。当状态改变时&#xff0c;UI会发生对应的渲染改变。 在状态变量相关装饰器中&#xff0c;State是最基础的&…

3D Surface Subdivision Methods 3D 曲面细分方法

文章目录 1 介绍2 细分法3 一个简单的例子&#xff1a;Catmull-Clark 细分4 Catmull-Clark 细化5 Refinement Host6 Geometry Policy7 四种细分方法8 示例&#xff1a;自定义细分方法9 实施历史 原文地址: https://doc.cgal.org/latest/Subdivision_method_3/index.html#Chapte…

深入了解选择重传协议(Selective Repeat Protocol)

选择重传协议&#xff08;Selective Repeat Protocol&#xff09;是计算机网络中常用的一种数据链路层协议&#xff0c;用于确保数据的可靠传输。本文将深入探讨选择重传协议的原理、应用场景及优缺点。 选择重传协议的核心思想是在发送端发送数据时&#xff0c;每一帧都被编号…

git ssh key 配置

一、Profile Settings-->SSH Keys 我们点击这里会有详情的文档介绍生成sshkey。 ssh-keygen -t rsa -b 2048 -C "邮箱" --回车... 将生成的id_rsa.pub粘贴到如下保存 git config --global user.name "用户名" git config --global user.email "邮…

苹果电脑交互式原型设计软件Axure RP 9 mac特色介绍

Axure RP 9 for Mac是一款交互式原型设计软件&#xff0c;使用axure rp9以最佳的方式展示您的作品&#xff0c;优化现代浏览器并为现代工作流程设计。同时确保您的解决方案正确完整地构建。Axure RP 9 for Mac为您整理笔记&#xff0c;将其分配给UI元素&#xff0c;并合并屏幕注…

apk反编译修改教程系列---修改apk包名等信息 让一个应用拥有无限分身 手机电脑同步演示【九】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…

Java后端开发——SSM整合实验

文章目录 Java后端开发——SSM整合实验一、常用方式整合SSM框架二、纯注解方式整合SSM框架 Java后端开发——SSM整合实验 一、常用方式整合SSM框架 1.搭建数据库环境&#xff1a;MySQL数据库中创建一个名称为ssm的数据库&#xff0c;在该数据库中创建一个名称为tb_book的表 …

Spark MLlib ----- ALS算法

补充 在谈ALS(Alternating Least Squares)之前首先来谈谈LS,即最小二乘法。LS算法是ALS的基础,是一种数优化技术,也是一种常用的机器学习算法,他通过最小化误差平方和寻找数据的最佳匹配,利用最小二乘法寻找最优的未知数据,保证求的数据与已知的数据误差最小。LS也被用…

Fastdata极数公司介绍

【写在开头】 前不久看到一句话和一个新闻&#xff0c;“数据作为主要生产要素&#xff0c;以资源化为起点&#xff0c;经历资产化、资本化阶段&#xff0c;逐步实现数据价值。” 2023年10月25日&#xff0c;国家数据局正式揭牌&#xff0c;由国家发展和改革委员会管理。 初看…