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

相关推荐
Jinkxs5 分钟前
从语法纠错到项目重构:Python+Copilot 的全流程开发效率提升指南
python·重构·copilot
技术专家5 分钟前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
段一凡-华北理工大学12 分钟前
【大模型+知识图谱+工业智能体技术架构】~系列文章01:快速了解与初学入门!!!
人工智能·python·架构·知识图谱·工业智能体
IT小Qi28 分钟前
iperf3网络测试工具
网络·python·测试工具·信息与通信·ip
以神为界36 分钟前
Python入门实操:基础语法+爬虫入门+模块使用全指南
开发语言·网络·爬虫·python·安全·web
xcjbqd037 分钟前
Python API怎么加Token认证_JWT生成与验证拦截器实现
jvm·数据库·python
io_T_T1 小时前
如何调用google api 进行开发(使用免费版本)
python
广师大-Wzx2 小时前
一篇文章看懂MySQL数据库(下)
java·开发语言·数据结构·数据库·windows·python·mysql
hef2882 小时前
golang如何使用range over func_golang range over func迭代器使用方法
jvm·数据库·python
qq_380619164 小时前
html如何查看windows
jvm·数据库·python