您现在的位置是:首页 > 技术教程 正文

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

admin 阅读: 2024-03-20
后台-插件-广告管理-内容页头部广告(手机)

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

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

Django——连接mysql数据库

  • 连接MySQL数据库
    • 1.安装MySQL驱动程序
    • 2.创建数据库
    • 3.配置settings.py文件
    • 4.django操作表
      • django操作表语句与mysql语句的关系
      • 创建表
      • 修改表
      • 插入数据
      • 删除数据
      • 查询数据
      • 更新数据
    • 5.迁移数据库
      • 报错解决

连接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_name、your_mysql_username和your_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

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索