Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

文章目录

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

python 复制代码
pip install mssql-django

2.修改settings.py文件中 DATABASES

xml 复制代码
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的

bash 复制代码
django-admin startapp bookModel

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

4.创建模型

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

python 复制代码
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这一项,如下:

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

在命令行中运行:

bash 复制代码
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

python 复制代码
from . import testdb
urlpatterns = [
    path('admin/', admin.site.urls),
    path('testdb/', testdb.testdb),

]

在testdb.py中添加testdb 方法

python 复制代码
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 请根据业务需求修改

python 复制代码
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>")
相关推荐
SelectDB2 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
ClouGence3 小时前
开源数据库管理工具 CloudDM 4.2.0 发布,新增 GoldenDB、KingbaseES 等数据源
数据库·dba·devops
发霉的馒头3 小时前
ORA-00845: MEMORY_TARGET not supported on this system的解决方法
数据库
ikun_文4 小时前
Django框架路由Router的使用
python·pycharm·django
草莓熊Lotso5 小时前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
煎饼皮皮侠7 小时前
【设计】设计一个web版的数据库管理平台后端(之五) --借鉴mybatis
数据库·mybatis
东风破_13 小时前
danci 2:创建的单词书到底存在哪里?从 Supabase 一路理解 ORM、Drizzle 和 RLS
数据库·后端·node.js
橙子家14 小时前
OSS 文件上传的几个风险点和解决方案
数据库
2601_9620664916 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
愤怒的苹果ext17 小时前
MySQL Shell备份恢复数据库
数据库·mysql·备份恢复·mysqlsh