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>")
```
相关推荐
刘科领4 小时前
使用ollama & openweb-ui 本地搭建自己的AI
人工智能·python·ui·ai
专业程序开发源4 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
夜雪一千4 小时前
Python 生成模拟地址数据:Faker之外的备选库
网络·windows·python
半亩码田4 小时前
C#转Python第4.8篇:正则表达式:Python re 模块 vs C# System.Text.RegularExpressions
python·正则表达式·c#
夜雪一千4 小时前
如何取消PyCharm自动识别test开头文件并进入测试模式
ide·python·pycharm
yi0114 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口
小李不困还能学4 小时前
PyCharm远程开发连接失败排查与解决
ide·python·pycharm
pride.li4 小时前
Python 安装
linux·python·ubuntu
全栈练习生4 小时前
模型上下文协议(MCP)
python·ai
泡海椒5 小时前
JQuick-Excel 多字段 TRANSFORM:让当前行字段、JContext 与展示列各归其位
开发语言·python·excel