ORM模型

一、ORM模型

写原生SQL的方式在代码中会出现大量SQL语句,会出现以下问题

  1. SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长,会出现很多相近的SQL语句。

  2. 使用SQL语句,会有“SQL注入问题”。、

ORM模型通过类的方式操作数据库,将表映射成类,把表当作一个实例对象,每一列当成一个属性,可以有效的SQL语句的不足,同时性能的消耗很少。使用ORM模型操作数据库与使用navicat操作数据库类似,都是对SQL语句进行封装,使执行起来更方便。

二、ORM模型使用

1.数据库配置

找到项目文件夹下的setting.py文件,定位到DATABASES配置:

# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
​
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

可以看到,默认配置的数据库就是python自带的sqlite3数据库,如果只想体验一下Django,无需任何操作就可以使用它。但是,当我们打算借助Django研发一个新的项目时,我们必定会选择扩展性更好,性能更强的数据库。避免中途切换数据库这个令人头疼的问题。

如果想使用其他数据库,则需要安装合适的 database bindings ,然后改变设置文件中 DATABASES ->'default' 项目中的一些键值:比如 我们需要增加用户名、密码、端口等。

ENGINE可选项包含主流的数据库:

  • 'django.db.backends.sqlite3'

  • 'django.db.backends.postgresql'

  • 'django.db.backends.mysql'

  • 'django.db.backends.oracle'

修改数据库为MySQL,并将配置信息改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        "NAME": "sq",
        "USER": "root",
        "PASSWORD": "12345678",
        "HOST": "192.168.8.142",
        "PORT": "3306",
    }
}

2.新建应用

python manage.py startapp sq

3.新建模型

一个模型就是单个定义你的数据的信息源。模型中包含了不可缺少的数据区域和存储数据的行为。Django 遵循 DRY 原则(Do Not Repeat Yourself)。目的就是定义你的数据模型要在同一位置上,而且自动从该位置推导一些事情。

不像 Ruby On Rails,Django 的迁移代码是由你的模型文件自动生成的,它本质上是个历史记录,Django 可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date  = models.DateTimeField(auto_now_add=True)
​
class UserPost(models.Model):
    user_id = models.BigIntegerField(name='用户ID')
    read_times = models.BigIntegerField(name='个人点击次数', default=1)
    is_like = models.BooleanField(name = '喜欢', default=False)
    is_start = models.BooleanField(name= '收藏', default=False)
    is_public = models.BooleanField(name='公开', default=True)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

上面的代码用于创建模型,但其实这给了 Django 很多信息,Django 可以通过我们编写的模型代码为这个应用创建数据库 schema(生成 CREATE TABLE 语句),并创建可以与 PostUserPost 对象进行交互的 Python 数据库 API。

应用是一个专门做某件事的应用程序。 Django中应用是可插拔式的,这也是Django的设计哲学之一,你可以在多个项目中使用同一个应用。

使得我们的工程中包含bbs这个应用,我们需要在setting.py配置文件中找到INSTALLED_APPS

image-20240730151342177

# Application definition
​
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

项目下已经包含应用了,接下来运行如下命令

python manage.py makemigrations

通过运行 makemigrations 命令,Django 会检测你对模型文件的修改,并且把修改的部分储存为一次 迁移。同时会在migrations文件夹下生成迁移文件。

此时并没有对数据库进行操作

Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 - 这个命令是 migratesqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL:

python manage.py sqlmigrate
  • sqlmigrate 命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。

运行 python manage.py check 这个命令可以帮助你检查项目中的问题,并且在检查过程中不会对数据库进行任何操作。

4. 迁移模型

python manage.py migrate

Django模型的每一次变化都要进行 makemigration, 保存好迁移记录,以便我们在将应用直接移植到其他项目时,可以直接运行 migrate 快速建立并运行项目。

5. 数据操作

5.1使用生成的api对数据进行操作

进入交互式 Python 命令行,通过以下命令打开

python manage.py shell
from bbs.models import Post
>>> from django.utils import timezone
>>> p = Post(title='第一批测试文章', content='文章内容11111测试', pub_date = timezone.now())
>>> p.save()
>>> p.id
1
>>> p.content
'文章内容11111测试'
>>> p.title='更换title'
>>> p.save()
5.2django自带的后端进行操作

django在创建时,默认为我们安装了一个后台管理应用,可以使用下面的命令来创建一个账户,并按提示输入用户名密码后,即可使用该账户进行访问。

python manage.py createsuperuser
##### 创建完账户后,使用web方式运行django
python manage.py runserver

image-20240730152844883

输入上面创建好的账户和密码

image-20240730152922595

我们需要在admin.py中注册我们的模型,告诉django需要对该模型生成后台接口

from django.contrib import admin
​
# Register your models here.
from .models import Post
​
admin.site.register(Post)

修改完成,刷新页面后,就可以对Post对象进行操作了

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值