当前位置: 首页 > news >正文

python之Django连接数据库

文章目录

  • 连接Mysql数据库
    • 安装Mysql驱动
    • 配置数据库信息
    • 明确连接驱动
    • 定义模型
      • 在模型下的models.py中定义表对象
      • 在settings.py 中找到INSTALLED_APPS添加创建的模型
  • 测试
    • testdb.py中写增删改查操作
    • urls.py添加请求路径
    • 启动项目进行测试

连接Mysql数据库

安装Mysql驱动

pip install pymysql

Django 模型使用自带的 ORM。

对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。

ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。

ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。

配置数据库信息

在settings.py中找到DATABASES定义要连接的数据库信息

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'rcdb','HOST': '127.0.0.1','PORT': 3306,'USER': 'youMysqlUser','PASSWORD': 'root'}
}

明确连接驱动

在settings.py同级中的__init__.py中进行配置

import pymysql
pymysql.install_as_MySQLdb()

定义模型

Django使用模型时必须新建一个app,使用下列命令创建:

django-admin startapp TestModel

在模型下的models.py中定义表对象

如果要连接多个表

from django.db import models# Create your models here.
class Test(models.Model):name = models.CharField(max_length=20)class Book(models.Model):id = models.AutoField(primary_key=True)title = models.CharField(max_length=32)price = models.DecimalField(max_digits=5,decimal_places=2)publish = models.CharField(max_length=32)pub_date = models.DateField()authors = models.ManyToManyField("Author")class Publish(models.Model):name = models.CharField(max_length=32)city = models.CharField(max_length=64)email = models.EmailField()class Author(models.Model):name = models.CharField(max_length=32)age = models.SmallIntegerField()au_detail = models.OneToOneField("AuthorDetail",on_delete=models.CASCADE)class AuthorDetail(models.Model):gender_choices = ((0,"女"),(1,"男"),(2,"保密"),)gender = models.SmallIntegerField(choices=gender_choices)tel = models.CharField(max_length=32)addr = models.CharField(max_length=64)birthday = models.DateField()

以上的类名代表了数据库表名,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。
在这里插入图片描述

在settings.py 中找到INSTALLED_APPS添加创建的模型

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','TestModel', # 本次新创建模型
]

以上步骤便定义好了项目的数据模型,可在项目中创建testdb.py中进行测试

测试

testdb.py中写增删改查操作

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test# 数据库操作-保存
def testdb(request):test1 = Test(name='菜鸟教程')test1.save()return HttpResponse("<p>数据库添加成功</p>")# 数据库操作-查询
def testdb_select(request):# 初始化response = ""response1 = ""# 通过objects这个模型管理器的all获得所有数据行,相当于SQL中的SELECT * FROMlistTest = Test.objects.all()# filter相当于SQL中的WHERE,可设置条件过滤结果response2 = Test.objects.filter(id=1)# 获取单个对象respone3 = Test.objects.get(id=1)# 限制返回的数据 相当于SQL中的 OFFSET 0 LIMIT 2;Test.objects.order_by("id")# 上面的方法可以连锁使用Test.objects.filter(name="菜鸟教程").order_by("id")# 输出所有的数据for var in listTest:response1 += var.name + " "response = response1return HttpResponse("<p>"+response+"</p>")def testdb_update(request):test1 = Test.objects.get(id=1)test1.name = 'Google'test1.save()#另外一种方式#Test.objects.filter(id=1).update(name='Google')#修改所有的列#Test.objects.all().update(name='Google')return HttpResponse("<p>修改成功</p>")def testdb_del(request):test1 = Test.objects.get(id=1)test1.delete()#另外一种方式#Test.objects.filter(id=1).delete()#删除所有数据#Test.objects.all().delete()return HttpResponse("<p>删除成功</p>")

urls.py添加请求路径

from django.contrib import admin
from django.urls import path
from . import views
from . import views,testdburlpatterns = [path('admin/', admin.site.urls),path("",views.hello,name="hello"),path("hello/",views.index),path("testdb/",testdb.testdb),path("selectTest/",testdb.testdb_select),path("updateTest/",testdb.testdb_update),path("delTest/",testdb.testdb_del),
]

启动项目进行测试

python manage.py runserver:0.0.0.0:8099

http://www.lryc.cn/news/498429.html

相关文章:

  • 基于Springboot+Vue的在线答题闯关系统
  • 声音克隆GPT-SoVITS
  • 【STM32 Modbus编程】-作为主设备读取保持/输入寄存器
  • 前端开发入门指南Day 17:TypeScript高级类型(泛型,类型守卫,Partial<T>和 Required<T>等)
  • flex布局容易忽略的角色作用
  • 如何开发高效的企业内训APP?教育培训系统源码搭建实战详解
  • 【软考网工笔记】网络基础理论——传输层
  • 如何预防服务器后台爆破攻击
  • CMake笔记之在CMakeLists.txt文件中开启Debug模式
  • C++编程:模拟实现CyberRT的DataVisitor和DataDispatcher
  • 【Flutter】WillPopScope组件-监听物理返回键事件自定义返回事件
  • 【sqlserver】mssql 批量加载数据文件 bulk copy使用
  • flinkSql中累计窗口CUMULATE
  • 关于在ubuntu上无法运行EasyConnect的解决方法
  • 【Axure高保真原型】数值条件分组
  • python学习——字符串的拼接操作
  • 多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)
  • el-select的搜索功能
  • MFC实现全屏功能
  • 网络安全技术详解:虚拟专用网络(VPN) 安全信息与事件管理(SIEM)
  • v-model 根据后端接口返回的数据动态地确定要绑定的变量
  • 图形开发基础之在WinForms中使用OpenTK.GLControl进行图形绘制
  • 离散数学重点复习
  • Javaweb梳理21——Servlet
  • 推荐学习笔记:矩阵补充和矩阵分解
  • etcd分布式存储系统快速入门指南
  • 解决VUE3 Vite打包后动态图片资源不显示问题
  • 大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)
  • Android学习14--charger
  • 页面开发样式和布局入门:Vite + Vue 3 + Less