当前位置: 首页 > news >正文

django入门-数据库基本操作

配置数据库建立模型

配置文件 settings.py 类似java中的application.yml

时区配置
TIME_ZONE = 'Asia/Shanghai'

INSTALLED_APPS配置中包含了默认应用

  • django.contrib.admin 管理员站点
  • django.contrib.auth 权限框架
  • django.contrib.contenttypes 内容类型框架
  • django.contrib.sessions 会话框架
  • django.contrib.message 消息框架
  • django.contrib.staticfiles 静态文件管理

创建数据库

基础表迁移命令

python manage.py migrate

这些基础表是来源于INSTALLED_APPS配置,如果不需要可以删除和注释

默认数据库连接是SQLite
在这里插入图片描述

创建模型

模型配置文件polls/models.py
添加内容

from django.db import modelsclass Question(models.Model):question_text = models.CharField(max_length=200)pub_date = models.DateTimeField("date published")class Choice(models.Model):question = models.ForeignKey(Question, on_delete=models.CASCADE)choice_text = models.CharField(max_length=200)votes = models.IntegerField(default=0)

内容说明:
定义了两个模型:问题 Question 和选项 Choice
每个模型都是继承models.Model
这个有点类似JPA
Question包含 字段 question_text 类型 由 models.CharField(max_length=200) 定义

默认值
default=0

使用ForeignKey 定义了一个关系,每个Choice都关联到一个Question对象,常用的:一对一,一对多,多对一,看起来很像之前的hibernate

激活模型

首先需要添加到模型
INSTALLED_APPS 中添加
'polls.apps.PollsConfig',

执行下面命令激活

python manage.py makemigrations

在使用 makemigrations 命令, Django 会检测你对模型文件的修改,并且把修改的部分储存为一次 迁移。

文件变更会被存储在 polls/migrations/0001_initial.py 文件中。

把模型变更同步到数据库

python manage.py migrate

日志信息

在这里插入图片描述

说明

  • 数据库的表名是由应用名(polls)和模型名的小写形式( question 和 choice)连接而来
  • 主键(IDs)会被自动创建
  • 默认的,Django 会在外键字段名后追加字符串 “_id”
  • 外键关系由 FOREIGN KEY 生成。请在事务全都执行完之后再创建外键关系
  • 它是为你正在使用的数据库定制的,因此特定于数据库的字段类型,例如“auto_increment”(MySQL)、“bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY”(PostgreSQL)或“integer primary key autoincrement” `` (SQLite) 会自动为您处理。 字段名称的引用也是如此——例如,使用双引号或单引号。
  • 这个 sqlmigrate 命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。这在你想看看 Django 到底准备做什么,或者当你是数据库管理员,需要写脚本来批量处理数据库时会很有用。
    在这里插入图片描述

可以执行下面命令检查是否有项目问题

python manage.py check ;

这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。

迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:

  1. 编辑 models.py 文件,改变模型。
  2. 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
  3. 运行 python manage.py migrate 来应用数据库迁移。

更多信息可以查看 django-admin 和 manage.py

API

使用下面命令可以进入api中进行查询

python manage.py shell

常见的命令
查询表中所有数据

Question.objects.all()

插入数据

>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.id

在这里插入图片描述

修改

q.question_text = "What's up?"
q.save()

在这里插入图片描述

上面查看表中的数据是 <Question: Question object (1)> 对象,可以使用 str() 来修复

例如

from django.db import modelsclass Question(models.Model):# ...def __str__(self):return self.question_textclass Choice(models.Model):# ...def __str__(self):return self.choice_text

在这里插入图片描述

自定义方法

添加方法

import datetimefrom django.utils import timezone
from django.db import modelsclass Question(models.Model):question_text = models.CharField(max_length=200)pub_date = models.DateTimeField("date published")def __str__(self):return self.question_textdef was_published_recently(self):return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

保存之后重新进入shell

python manage.py shell

查询展示题目信息

Question.objects.all()

根据字段过滤

Question.objects.filter(id=1)

以什么开头

Question.objects.filter(question_text__startswith="What")

时间转年进行过滤

from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)

获取不存在的,会异常

Question.objects.get(id=2)

异常信息如下

Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.

调用自定义方法

q = Question.objects.get(pk=1)
q.was_published_recently()

查询习题关联的选项

q.choice_set.all()

添加选项

q.choice_set.create(choice_text="Not much", votes=0)
q.choice_set.create(choice_text="The sky", votes=0)
c = q.choice_set.create(choice_text="Just hacking again", votes=0)

查询选项关联的习题

c.question

查询习题所有选项

q.choice_set.all()

查询选项数量

q.choice_set.count()

关联查询过滤

Choice.objects.filter(question__pub_date__year=current_year)

删除选项

c = q.choice_set.filter(choice_text__startswith="Just hacking")
c.delete()

更多方法

多个模型之间的关系
关联对象参考

双下划线方法

数据库相关文档

Django 管理页面

创建账号

python manage.py createsuperuser

根据提示输入账号邮箱密码即可

管理员登录地址

http://127.0.0.1:8000/admin/

在这里插入图片描述

里面的用户和组是 django.contrib.auth 框架提供的

但是我们的应用这个页面是看不见的
需要在
polls/admin.py中注册
内容如下

from django.contrib import adminfrom .models import Questionadmin.site.register(Question)

在这里插入图片描述

同时提供了一些简单的操作
在这里插入图片描述
在这里插入图片描述

代码库


文章转载自:

http://380eTgtk.rmtxp.cn
http://HnrWSNnx.rmtxp.cn
http://JgnYRdgK.rmtxp.cn
http://ALNbD73p.rmtxp.cn
http://HewYId7o.rmtxp.cn
http://gz6u2beL.rmtxp.cn
http://X5BgmOvg.rmtxp.cn
http://Ozo804jp.rmtxp.cn
http://KN34cRAS.rmtxp.cn
http://IMAMrXVd.rmtxp.cn
http://5kVVt4Y7.rmtxp.cn
http://8wANrbDx.rmtxp.cn
http://T9YglRPO.rmtxp.cn
http://wdDok2zd.rmtxp.cn
http://fbHY1Daq.rmtxp.cn
http://VdUS5L2a.rmtxp.cn
http://0jzBwqNt.rmtxp.cn
http://Oe71733U.rmtxp.cn
http://31xe2TLo.rmtxp.cn
http://eKyU8Bk6.rmtxp.cn
http://fh4mX565.rmtxp.cn
http://uOc3jgl1.rmtxp.cn
http://5lCgJUli.rmtxp.cn
http://N6VNyvF9.rmtxp.cn
http://GmbCRuVZ.rmtxp.cn
http://hdK4v8KJ.rmtxp.cn
http://z0ixvQDd.rmtxp.cn
http://lQ9oXJaI.rmtxp.cn
http://d81nWoSQ.rmtxp.cn
http://ikfuEwSq.rmtxp.cn
http://www.dtcms.com/a/385794.html

相关文章:

  • springboot的项目实现excel上传功能
  • 从 Docker 守护进程获取实时事件
  • TCP编程:socket概念及使用方法(基础教程)
  • Python 在运维与云原生领域的核心应用:从基础到实践
  • 项目实战:Rsync + Sersync 实现文件实时同步
  • 云原生是什么
  • Docker 镜像瘦身实战:从 1.2GB 压缩到 200MB 的优化过程
  • RabbitMQ消息中间件
  • 2019年下半年 系统架构设计师 案例分析
  • OpenAI编程模型重磅升级!GPT-5-Codex发布,动态思考机制实现编程效率倍增
  • 数据结构排序入门(2):核心排序(选择排序,快速排序及优化)
  • 达索系统 SIMULIA 大中华区用户大会启幕,迅筑科技分享设计仿真一体化落地方案
  • 未来已来:当清洁成为一场静默的科技交响
  • 从零开始手写机器学习框架:我的深度学习之旅
  • Qt QML Switch和SwitchDelegate的区别?
  • MATLAB 线弹性 + 裂纹扩展 1D2D3D 统一框架
  • 基于Qt的跨平台全局输入事件监控技术实现
  • 从0到1入门JVM
  • Tessent_ijtag_ug——第 5 章IJTAG 网络插入 (1)
  • leetcode238.除自身以外数组的乘积
  • 【数据工程】6. 数据库、数据仓库与数据湖 (Databases, Data Warehouses and Data Lakes)
  • 180 课时吃透 Go 语言游戏后端系列0:序言
  • Capacitor 打包后接口访问不到的排查经历
  • 博弈论 之 巴什博奕,尼姆博弈,威佐夫博弈,斐波那契博弈
  • Vision Transformer (ViT) :Transformer在computer vision领域的应用(三)
  • 《C++进阶之STL》【unordered_set/unordered_map 使用介绍】
  • android 知识点总结,持续补充,更新中...
  • 【Web安全】CSV 注入的安全测试指南:从原理到防御实践
  • Unity休闲游戏性能checklist
  • 【vue3-element-admin 项目实战】:基于vue-pdf-embed 构建专业级PDF预览组件