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

相关推荐
我命由我1234519 分钟前
Python 开发 - Python 项目部署(Windows 与 Linux)
java·linux·windows·后端·python·java-ee·python3.11
Zella折耳根35 分钟前
实验2进阶版数据看板的设计与实现
python
databook43 分钟前
让 LLM 输出不再失控:用 Pydantic 校验大模型输出
人工智能·python·llm
jingcairensheng1 小时前
vscode 配置Python虚拟环境基于扩展和原生miniconda的区别
ide·vscode·python
“AI国潮设计-小江”1 小时前
《【AIGC实战】Python+SDXL批量生成“英歌舞草莓抱抱卷蛋糕”IP插牌立牌方案,锁定角色一致性,甜品插件化落地》
开发语言·人工智能·python·prompt·aigc
LMT流氓兔1 小时前
第五单元——第7课:工具读取用户身份,而不是让模型填写身份
python·langchain
FlyWIHTSKY1 小时前
Agent阶段一:基础夯实
python·ai·fastapi
估值探索者1 小时前
【Python量化技术指标实战 04】布林带通道突破,怎么知道是真突破还是假突破?
java·开发语言·python·接口·股票数据api接口
fanruitian1 小时前
python property
开发语言·python
Web3&Basketball1 小时前
MiniMax M3.1 Flash实战:3个成本坑
python·大模型·成本优化·minimax·推理优化·token计费