IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django对数据表的ddl操作 -> 正文阅读

[Python知识库]Django对数据表的ddl操作

前面我们成功的用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 = True
        db_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 = 400
    books.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为如来神掌的字段将字段的价格更新为400
    books.price = 400
    books.save()
    '''
    books = Hook.objects.filter(pk__in=[3, 4]).update(price=888)#查找id为3,4的字段更新为888
    print(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()   # 删除成功

暂时写到这里

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:00:11  更:2022-08-19 19:02:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 14:32:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计