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

相关推荐
YoungHong199213 分钟前
【Python进阶】告别繁琐Debug!Loguru一键输出异常日志与变量值
python·debug·异常处理·日志·loguru·log·logger
AiXed1 小时前
PC微信协议之nid算法
python·网络协议·算法·微信
小李哥哥2 小时前
基于数据的人工智能建模流程及源码示例
python
APIshop2 小时前
实战解析:苏宁易购 item_search 按关键字搜索商品API接口
开发语言·chrome·python
蓝桉~MLGT2 小时前
Python学习历程——Python面向对象编程详解
开发语言·python·学习
larance2 小时前
Python 中的 *args 和 **kwargs
开发语言·python
百锦再2 小时前
选择Rust的理由:从内存管理到抛弃抽象
android·java·开发语言·后端·python·rust·go
yaoxin5211232 小时前
238. Java 集合 - 使用 ListIterator 遍历 List 元素
java·python·list
nvd112 小时前
python 后端流式处理 LLM 响应数据详解
开发语言·python
F_D_Z3 小时前
【解决办法】报错Found dtype Long but expected Float
人工智能·python