前面我们成功的用Django连接上了自己的数据库,并通过自带的表管理工具Adimn对数据表进行了简单的管理操作,使我们可以对数据表做出增删改查操作,本次我们通过Django代码的方式来实现数据库的增删改查操作


1.创建数据表

前面我们注意到在已有的数据表中我们对其进行迁移命令,即可在自己的model里生成相应的表及其内容,容易想到反操作是不是即可创建一张新的表单呢 。

事实也是如此,我们在models了写入自己要创建的表 ,表里的字段之类的东西

class Hook(models.Model):id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入title = models.CharField(max_length=32) # 书籍名称price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格publish = models.CharField(max_length=32) # 出版社名称pub_date = models.DateField() # 出版时间class Meta:managed = Truedb_table = 'hook'

这里注意到managed设置为了True前面我们从数据库迁移过来时表都是已经存在的所以managed默认了False这里注意,一开始写成了False则在model里均已生成了表但是却没有同步到数据库中,实际上有关managed他的默认值应为Ture,如果设置为 False ,Django 将不会为当前 model 创建或者删除数据库表,如果你的测试中包含非托管 model (managed=False),那么在测试之前,你应该要确保在测试 创建时已经创建了正确的数据表。

完成自己表的创建后对数据做一下迁移同步到到数据库中去

python manage.py makemigrations xxx(app名)  # 运行生成迁移文件的命令
python manage.py migrate xxx # 同步数据库

到这里我们成功的在我们的数据库中创建一张名为hook的新表。


2.现在我们在新建的表里添加一条记录

我们在之前的test里新建一个添加字段的函数如下

def add_book(request):books = Hook.objects.create(title="如来神掌", price=200, publish="功夫出版社", pub_date="2010-10-10")print(books)  # Book object (18)return HttpResponse("<p>数据添加成功!</p>")

在url里添加上自己的函数

path('add-book/',testdb.add_book),


3,接下编写查找函数

def serach_book(request):books = Hook.objects.all() print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。return HttpResponse("<p>查找成功!</p>")
#可直接运用前面的user_info作为查找函数,用all()返回表所有的字段,values() 可返回字段的值

也可利用filter函数编辑子查询实现精确查询

books=Hook.objects.filter(title__startswith="如来").annotate(c=Count("title")).values("title", "c")#查找title以如来开头的字段

还有很多函数可以实现sql语句里的各种条件查询,具体想要实现某功能可以在查阅资料


4改

这里介绍两个更改数据的方式

方式一

模型类的对象.属性 = 更改的属性值      模型类的对象.save()

def serach_book(request):#books = Hook.objects.all()books=Hook.objects.filter(title="如来神掌").first()books.price = 400books.save()print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。return HttpResponse(books)

方式二

QuerySet 类型数据.update(字段名=更改的数据)(推荐)

返回值:整数,受影响的行数

def serach_book(request):#books = Hook.objects.all()'''books=Hook.objects.filter(title="如来神掌").first()#查找title为如来神掌的字段将字段的价格更新为400books.price = 400books.save()'''books = Hook.objects.filter(pk__in=[3, 4]).update(price=888)#查找id为3,4的字段更新为888print(books,type(books)) # QuerySet类型,类似于list,访问 url 时数据显示在命令行窗口中。return HttpResponse(books)


5.删

方式一:使用模型类的 对象.delete()。

返回值:元组,第一个元素为受影响的行数。

books=Hook.objects.filter(pk=8).first().delete()

方式二:使用 QuerySet 类型数据.delete()(推荐)

返回值:元组,第一个元素为受影响的行数。

books=Hook.objects.filter(pk__in=[1,2]).delete()

注意:

  • a. Django 删除数据时,会模仿 SQL约束 ON DELETE CASCADE 的行为,也就是删除一个对象时也会删除与它相关联的外键对象。
  • b. delete() 方法是 QuerySet 数据类型的方法,但并不适用于 Manager 本身。也就是想要删除所有数据,不能不写 all。
books=Hook.objects.delete()  # 报错
books=Hook.objects.all().delete()   # 删除成功

暂时写到这里

Django对数据表的ddl操作相关推荐

  1. GaussDB(DWS)应用实战:对被视图引用的表进行DDL操作

    摘要:GaussDB(DWS)是从Postgres演进过来的,像Postgres一样,如果表被视图引用的话,特定场景下,部分DDL操作是不能直接执行的. 背景说明 GaussDB(DWS)是从Post ...

  2. Django 误删数据表恢复

    Django 误删数据表结构恢复 最近写项目的时候,误在mysql中将某张由Django迁移生成的数据表删除,表中本身是空的,但是使用的是drop命令,将整个表结构都删了,为了恢复表,做了一些尝试,记 ...

  3. mysql显示表已存在_MySQL数据库与数据表的相关操作

    数据库相关操作: 显示数据库:show databases; 如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒. 创建数据库: Query OK表示创建成功,1行受到影响,处理时间 ...

  4. MySQL数据库基础(数据表的SELECT操作)

    文章目录 数据表的操作 1.创建成绩表 2.select表达式 3.查询 4.修改(AS) 5.筛选(WHERE) 6.排序(ORDER) 7.分组(GROUP) 8.过滤(HAVING) 9.聚合函 ...

  5. Django删除数据表后,再重新生成新数据表

    删除数据表后,数据库的Django migrations数据未删除,如果直接命令行调用如下命令,是不会再生成数据表的 Python manager.py makemigrations Python m ...

  6. Django数据库数据增删改查操作

    一. 无需实现model.py文件获取实例对象就能直接通过连接数据库进行数据的增删改查操作 # 连接数据库用于查询(查询单个或多个) def db_query(sql):# 打开数据库连接db = p ...

  7. 如何快速核对Excel数据表?这样操作不同的数据一目了然

    我想还有很多朋友会遇到数据核对的问题,为了帮助大家提高工作效率,小编为大家整理了一个快速核对Excel数据表的方法,有兴趣的可以来看看! 具体的操作方法: 1:首先打开自己手中的Excel数据表,全选 ...

  8. SQLserver2008数据表的修改操作

    --操作1:为"教师表"表添加"年龄"列(数据类型为varchar,长度为3,允许为空) --alter table 教师表 add 年龄 varchar(3) ...

  9. PHP数据表记录自己信息,PHP对数据表记录的操作

    •       插入数据 •       修改记录 •       删除记录 •       提取记录 •       指定记录提取 •       提取记录个数 插入数据 向数据表中增加记录,可以使 ...

最新文章

  1. 程序员吐槽:去再好的互联网公司也就是个打工仔,还累出一身病
  2. IDC:PC时代将结束 微软谷歌是最大输家和赢家
  3. [react] 有在项目中使用过Antd吗?说说它的好处
  4. [react] React Hooks帮我们解决了哪些问题?
  5. grunt之Gruntfile(1)
  6. docker k8s helm常用命令梳理
  7. 数据库应用程序为什么不能脱离数据库管理系统独立运行
  8. 2007年11月网络工程师考试试题答案
  9. 42岁失业,有150万存款,房子无贷款,不想上班做点什么好?
  10. 利用位运算实现加减乘除
  11. Linux中的三个特殊文件
  12. Hadoop教程(一)
  13. Python excel转图片保存
  14. leetcode算法88.合并两个有序数组
  15. 除了Scrcpy,还有哪些免费的多屏协同软件,例举3款
  16. 2009谷歌全球热门搜索关键词排行
  17. CorelDRAW X7导出pdf发现部分有白边如何处理
  18. Hadoop2.7下载安装
  19. Pytorch学习笔记——fan_in和fan_out
  20. 省市的json格式数据

热门文章

  1. 在“区块链+”时代,美体内衣前景如何?
  2. 嵌入式Linux系统小技巧之U盘自动运行脚本
  3. 软件安全技术复习内容
  4. 7-1 哥尼斯堡的“七桥问题”
  5. 正则表达式,字符串匹配、搜索、替换
  6. 增大max_result_window是错的,ES只能查询前10000条数据的正确解决方案
  7. pmp缩写术语中文解释
  8. swf怎么转换成mp4格式?来看看这个简单方法
  9. 微信不是互联网,互联网也不是微信。
  10. 郑轻第六届校赛 -- 部分题解