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>")
```
相关推荐
曹轲恒2 小时前
SpringBoot的热部署
java·spring boot·后端
huwei8532 小时前
python设计通用表格类 带右键菜单
开发语言·windows·python
计算机毕业编程指导师2 小时前
【计算机毕设选题】基于Spark的拉勾网招聘数据分析系统源码,Python+Django全流程
大数据·hadoop·python·spark·django·招聘·拉勾网
duyinbi75172 小时前
TOOD_R50_FPN_Anchor-Based_1x_COCO_列车悬挂部件检测分类实战
python
学习3人组2 小时前
大模型轻量化调优(昇腾平台方向)岗位技术名词拆解
人工智能·python
bing.shao2 小时前
Golang 在OPC领域的应用
开发语言·后端·golang
知乎的哥廷根数学学派2 小时前
基于物理引导和不确定性量化的轻量化神经网络机械退化预测算法(Python)
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
程序员侠客行2 小时前
Mybatis插件原理及分页插件
java·后端·架构·mybatis
xj7573065332 小时前
Django 面试常见问题
python·面试·django