python之Django连接数据库

文章目录

连接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 * FROM
    listTest = 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 = response1
    return 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,testdb

urlpatterns = [
    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

相关推荐
淼澄研学16 分钟前
PyTorch深度学习实战:5个核心方法从0到1构建神经网络
前端·数据库·python
SunnyDays101127 分钟前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json
天l志37 分钟前
Chrome Extension + 本地服务:浏览器页面上下文采集与远程执行技术设计
python·谷歌浏览器
CodexDave39 分钟前
Python 自动化接单实战(九):Windows 免环境交付如何打包与诊断
windows·python·自动化·python自动化·pyinstaller·软件交付·windows打包
CTA量化套保41 分钟前
2026年量化入门路线,概念规则和简单实现逐步走
人工智能·python
米码收割机1 小时前
【Python】Python Django+Vue3校园自习室预约管理系统(源码+文档+PPT)【独一无二】
开发语言·python·django
AstartesEternal1 小时前
python第二次作业(列表,字典)
开发语言·python
拉特莉的祈祷机1 小时前
绿色测试日志为什么可能已经失效:用 AET 绑定命令与当前代码
python
三金121381 小时前
Python的一些内置模块
python
NPE~2 小时前
RAG 实战教程:从零构建企业智能问答 Agent
python·ai·实战·rag·agent搭建