• 【python】Django——连接mysql数据库


    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~

    【Django专栏】
    Django——django简介、django安装、创建项目、快速上手
    Django——templates模板、静态文件、django模板语法、请求和响应
    Django——连接mysql数据库

    连接MySQL数据库

    ORM(Object-Relational Mapping)是一种编程技术,它允许开发者使用面向对象的方式来操作数据库,而不必直接编写SQL语句。在Django中,ORM是通过Django自带的django.db.models模块来实现的。

    • 创建、修改、删除数据库中的表【无法创建数据库】
    • 操作表中的数据

    1.安装MySQL驱动程序

    首先,确保你已经安装了适用于Python的MySQL驱动程序。可以使用pip命令来安装,例如:

    pip install mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple

    在这里插入图片描述

    2.创建数据库

    需要在mysql中完成
    在这里插入图片描述

    3.配置settings.py文件

    打开你的Django项目中的settings.py文件,找到DATABASES设置部分,并进行如下配置:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'your_database_name',
            'USER': 'your_mysql_username',
            'PASSWORD': 'your_mysql_password',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    确保将your_database_nameyour_mysql_usernameyour_mysql_password替换为你的MySQL数据库的名称、用户名和密码。

    4.django操作表

    django操作表语句与mysql语句的关系

    在Django中,操作表的语句与直接在MySQL中执行的SQL语句有着密切的关系。Django的ORM(Object-Relational Mapping)提供了一种Pythonic的方式来操作数据库,它将Python代码翻译成对应的SQL语句,并执行这些SQL语句以实现数据库操作。

    下面是一些常见的数据库操作,以及它们在Django ORM中的对应方式和在MySQL中的原生SQL语句:

    创建表

    Django ORM:

    # 在models.py中定义模型
    class UserInfo(models.Model):
    name = models.CharField(max_length=64)
    password = models.CharField(max_length=128)
    age = models.IntegerField()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    MySQL原生SQL:

    CREATE TABLE application01_userinfo (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(64),
    password VARCHAR(128),
    age INT
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用Django的管理命令manage.py来执行数据库迁移操作,将模型映射到实际的数据库表。在命令行中执行以下命令:

    python manage.py makemigrations  # 生成数据库迁移文件
    python manage.py migrate  # 应用数据库迁移
    
    • 1
    • 2

    修改表

    新增一个列
    两种选择:
    在这里插入图片描述
    1) 立即提供一次性默认值(将在该列具有null值的所有现有行上设置)
    2) 退出,在models.py中添加一个默认值或允许为空

    # 添加默认值
    salary = models.IntegerField(default=5000)
    # 允许为空
    salary = models.IntegerField(null=True, blank=True)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    插入数据

    # 原生sql语句:insert into application01_userinfo(name, password, age) VALUES ('quanquan', '123', 18)
    # UserInfo.objects.create(name=name, password=password, age=age)
    
    def register(request):
    	# POST方式
        if request.method == 'POST':
            # 处理表单提交
            name = request.POST.get('name', '')
            password = request.POST.get('password', '')
            age = request.POST.get('age')
            # 构造上下文数据
            context = {
                'name': name,
                'password': password,
                'age': age,
    
            }
            # 往数据库插入数据
            UserInfo.objects.create(name=name, password=password, age=age)
            # 渲染模板并返回响应
            return render(request, 'result.html', context)
        else:
            # 显示表单页面
            return render(request, 'register.html')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    register.html

    DOCTYPE html>
    <html>
    <head>
        <title>输入信息title>
    head>
    <body>
        <h2>请输入您的信息h2>
        <form method="post" action="/register/">
    
    
            {% csrf_token %}
            <label for="name">姓名:label>
            <input type="text" id="name" name="name"><br><br>
            <label for="password">密码:label>
            <input type="text" id="password" name="password"><br><br>
            <label for="age">年龄:label>
            <input type="text" id="age" name="age"><br><br>
            <input type="submit" value="提交">
        form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    result.html

    
    DOCTYPE html>
    <html>
    <head>
        <title>提交结果title>
    head>
    <body>
        <h2>提交结果h2>
        <p>您提交的信息如下:p>
        <p>姓名:{{ name }}p>
        <p>密码:{{ password }}p>
        <p>年龄:{{ age }}p>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    在这里插入图片描述

    删除数据

    # 删除数据
    UserInfo.objects.filter(id=1).delete()
    UserInfo.objects.all().delete()
    
    • 1
    • 2
    • 3

    查询数据

    # 查询数据
    data_list = UserInfo.objects.all()
    
    # data_list = [行对象,行对象,...,行对象]	QuerySet类型
    
    print(data_list)	
    # , ]>
    
    for obj in data_list:
    	print(obj.name,obj.password,obj.age)
    # 圈圈 123456 20
    # 圈圈1 123456 11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    更新数据

    # 更新 id 为 1 的记录的 name 和 age 字段
    UserInfo.objects.filter(id=1).update(name='new_name', age=30)
    
    • 1
    • 2

    Django的ORM会将我们的Python代码翻译成对应的SQL语句,并执行这些SQL语句以实现数据库操作。这种方式简化了数据库操作的复杂性,同时也提高了代码的可读性和可维护性。

    5.迁移数据库

    使用Django的管理命令manage.py来执行数据库迁移操作,将模型映射到实际的数据库表。在命令行中执行以下命令:

    python manage.py makemigrations  # 生成数据库迁移文件
    python manage.py migrate  # 应用数据库迁移
    
    • 1
    • 2

    Django 就会根据这个模型创建相应的 MySQL 表。假设你的应用名为 application01,模型名为userinfo,那么在 MySQL 数据库中就会生成一个名为 application01_userinfo的表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    报错解决

    报错:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)
    原因:django与mysql版本不兼容
    解决方式:
    1.升级mysql版本(SELECT VERSION() 我的版本是5.5.40),有点麻烦不想升级
    2.降低django版本(需要先搜一下版本兼容情况)

    pip uninstall django
    pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

  • 相关阅读:
    OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色、不同长度和不同透明度的长方形(矩形)图形,适用于大量矩形图形渲染
    Mysql锁
    【PHP特性-变量覆盖】函数的使用不当、配置不当、代码逻辑漏洞
    子进程信号继承;kill+raise+alarm+pause+信号发生接收和处理+信号屏蔽
    Linux常用的压缩和解压命令gzip,gunzip,tar,zip, unzip和bzip2,bunzip2
    658. 找到 K 个最接近的元素
    学生Dreamweaver静态网页设计 基于HTML+CSS+JavaScript制作简食餐厅美食网站制作
    详解IDEA git 版本回滚
    云原生数据库如荼如火,未来可期
    git代码触发持续集成接口自动化构建
  • 原文地址:https://blog.csdn.net/weixin_44319595/article/details/134411910