Django 模型

Django 对各种数据库提供了很好的支持,包括PostgreSQL,MySQL,SQLite,Oracle。Django为这些数据库提供了统一的调用API。

mysql驱动,可以执行以下命令安装:

python 复制代码
pip3 install pymysql
Django ORM

Django 模型使用自带的ORM。对象关系映射(Object Relational Mapping,简称ORM)用于实现面向对象编程语言里不同类型的系统的数据之间的转换。

ORM在业务逻辑层和数据库层之间当了桥梁的作用。

ORM是通过使用描述对象和数据库之间的映射元数据,将程序中的对象自动持久化到数据库中。

使用ORM的好处

  • 提高开发效率
  • 不同数据库可以平滑切换

使用ORM的缺点

  • ORM代码转换为SQL语句时,需要花费一定的数据,执行效率会有所降低。
  • 长期写ORM代码,会降低编写SQL语句的能力。

ORM 解析过程:

  1. ORM会将Python代码转化为SQL语句。
  2. SQL语句通过pymysql传送到数据库服务端。
  3. 在数据库中执行SQL语句并将结果返回。

ORM 对应关系表:

python 复制代码
ORM                       数据库
Models类        ->         数据表
对象实例        - >        一条记录
属性            ->         字段
数据库配置

首先我们在mysql数据库创建test数据库,编码指定为utf8;

复制代码
  create database test default charset=utf8;   

settings.py文件代码:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #数据库引擎
        'NAME': 'test2',     #数据库名称
        'HOST':'127.0.0.1',  #数据库地址
        'PORT':'3306', #数据库用户名
        'USER':'root',
        'PASSWORD':'root' #数据库密码
    }
}

接下来,告诉Django使用pymysql模块连接mysql数据库。

python 复制代码
#在与settings.py 同级目录下的__init__.py中引入模块和进行配置。
import pymysql
pymysql.install_as_MySQLdb()
定义模型

创建APP

Django 规定,如果要使用模型,必须要创建一个app,我们使用以下TestModel的app:

python 复制代码
django-admin startapp book

我们修改TestModel/models.py文件,代码如下:

python 复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'book',
]

在Terminal运行命令:

复制代码
  py manage.py migrate #创建表结构
  py manage.py makemigrations book
  py manage.py migrate book #创建表结构
数据库操作

接下来在项目中添加testdb.py文件,并且修改urls.py:
*

复制代码
###### 添加数据

添加数据需要先创建对象,然后再执行save函数,相当于SQL中的INSERT;

```python
from django.http import HttpResponse
from book.models import Test

#数据库操作
def testdb(request):
    test1 = Test(name='zulnger')
    test1.save()
    return HttpResponse("<p>数据添加成功!</p>")

```
复制代码
###### 获取数据

Django 提供了很多方式来获取数据库的内容,如下所示:

```python
#数据库操作
def testdb(request):
    #初始化
    response = ""
    response1 = " "

    #通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
    listTest = Test.objects.all()
    #filter相当于SQL中的WHERE,可设置条件过滤结果。
    response2 = Test.objects.filter(id=1)
    #获取单个对象
    response3 = Test.objects.get(id=1)
    #限制返回的数据 相当于SQL中的OFFSET 0 LIMIT 2;
    Test.objects.order_by('name')[0:2]
    #数据排序
    Test.objects.order_by("id")
    #上面的方法可以连锁使用
    Test.objects.filter(name='zulnger').order_by("id")

    #输出所有数据
    for var in listTest:
        response1 += var.name +""

    response = response1
    return HttpResponse("<p>"+response+"</p>")

```
复制代码
###### 更新数据

修改数据可以使用save()或update():

```python
#数据库操作
def testdb(request):
    
    #修改其中一个id=1的那么字段,再save,相当于SQL中UPDATE
    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")


```
复制代码
###### 删除数据

删除数据库中的对象只需调用该对象的\*\*dalete()\*\*方法即可:

```python
#数据库操作
def testdb(request):

    #删除id=1的数据:
    test1 = Test.objects.get(id=1)
    test1.delete()

    #另外一种方式
    #Test.objects.filter().delete()
    #删除所有数据
    # Test.objects.all().delete()

    return HttpResponse("<p>删除成功</p>")
```
相关推荐
橙序员小站1 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德1 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆3 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好20254 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字5 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常5 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强5 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常5 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌5 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
None3215 小时前
【NestJs】基于Redlock装饰器分布式锁设计与实现
后端·node.js