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

相关推荐
chao_7897 分钟前
二分查找篇——寻找旋转排序数组中的最小值【LeetCode】
python·线性代数·算法·leetcode·矩阵
金玉满堂@bj24 分钟前
PyCharm 中 Python 解释器的添加选项及作用
ide·python·pycharm
程序员三藏29 分钟前
如何使用Pytest进行测试?
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
随心点儿1 小时前
使用python 将多个docx文件合并为一个word
开发语言·python·多个word合并为一个
不学无术の码农1 小时前
《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
开发语言·python
sleepybear11131 小时前
在Ubuntu上从零开始编译并运行Home Assistant源码并集成HACS与小米开源的Ha Xiaomi Home
python·智能家居·小米·home assistant·米家·ha xiaomi home
纪伊路上盛名在1 小时前
(鱼书)深度学习入门1:python入门
人工智能·python·深度学习
夏末蝉未鸣012 小时前
python transformers笔记(TrainingArguments类)
python·自然语言处理·transformer
德育处主任Pro2 小时前
「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
数据库·python·数据分析
咸鱼鲸2 小时前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python