Django中操作数据库的3种方法

2021-12-06 07:55陈娜付沛
科学与生活 2021年24期
关键词:调用管理器命令

陈娜 付沛

摘要:Django通过Manager(模型管理器)提供数据库访问接口。默认情况下,Django为每个模型添加一个名为objects的管理器,调用objects的各种方法 可完成相关的数据库操作;也可以用模型管理器的raw()方法执行原始SQL查询并返回模型示例;或者不使用模型直接执行原始SQL。本文介绍3种方法,可根据自身情况选择一种方法完成数据库操作。

在django中我们只需要操作类或者对象,ORM它系统帮你根据类和对象来操作数据库

类--à数据表 对象 ---〉数据行 属性—〉 字段

首先创建项目mydjango

1、 创建book 应用

2、 在settings.py文件中加入book应用

3、 打开models.py定义表的结构

class faqsdata(models.Model):

question = models.CharField(max_length=20, blank=True)

answer = models.CharField(max_length=20, blank=True)

4、使用命令生成迁移文件(系统帮你生成的sql语句)

python manage.py makemigrations

5、使用命令 运行 迁移文件(相当于执行sql命令)

python manage.py migrate

6、打开终端输入以下命令进入当前项目的Python交互环境

python manage.py shell

7、导入模型类

from book.models import ;faqsdata

一、使用默认管理器objects

Django通过模型对象的默认管理器objects提供了多种获取数据的方法

(1)create方法创建模型的对象,并将数据保存进数据库

>>> ds=faqsdata.objects.create(question='test',answer='bbb')

>>> ds=faqsdata.objects.create(question='test434',answer='aaa')

(2)all方法获取所有数据行,相当于sql中的select * from ****

>>> ds=faqsdata.objects.all()

>>> for a in ds:

... print(a.id,a.question,a.answer)

...

1 test bbb

2 test4334 aaa

(3)get、filter、update方法过滤出符合条件的行进行更新

1更新单行

>>> ds=faqsdata.objects.get(id="1")

>>> print(ds.id,ds.question,ds.answer)

1 test bbb

>>> ds.question="yyyyyyyy"

>>> d.save()

>>> print(ds.id,ds.question,ds.answer)

1 yyyyyyyy bbb

2更新多行

>>> ds=faqsdata.objects.filter(id__lte="9")

>>> ds.update(answer='bbbbbb')

4

>>> ds=faqsdata.objects.update(answer='ppppp') 全表更新

>>>

(4)filter、delete方法过滤出符合条件的行进行删除

>>> faqsdata.objects.filter(id__gt=9).delete() get删除单行

(3, {'book.faqsdata': 3})

二、用模型管理器raw()方法執行原始SQL

>>> ds=scores.objects.raw("select * from book_scores where yw<%s",[50])

>>> for a in ds:

... print(a.id,a.kh,a.xm,a.yw,a.sx,a.bj)

...

>>> ds=scores.objects.raw("update book_scores set yw=100 where id=3")

>>> ds.query._execute_query()

>>>d=scores.objects.raw("insert into book_scores(kh,xm,yw,sx,bj) values ('10110199','fdsaf',11,22,'class1')")

>>> d.query._execute_query()

>>> d=scores.objects.raw("delete from book_scores where id=63")

>>> d.query._execute_query()

三、不使用模型訪问数据库

也可以不使用模型管理器直接访问数据库,使用游标,但是有SQL注入风险,基本步骤如下:

调用django.db.connection.cursor()方法获得一个游标对象。django.db.connection对象代表默认数据库连接。

调用游标对象的execute(sql)方法执行SQL命令。

调用游标对象的fetchall()或fetchone()方法返回数据。

>>> from django.db import connection

>>> cursor=connection.cursor()

>>> cursor.execute("select * from book_scores where id<7")

>>> for a in cursor.fetchall():

... print(a[0],a[1],a[2])

...

>>>a=cursor.execute("insert into book_scores(kh,xm,yw,sx,bj) values ('10110199','fdsaf',11,22,'class1')")

>>> a=cursor.execute("update book_scores set yw=100 where id=10")

>>> a=cursor.execute("delete from book_scores where id=10")

猜你喜欢
调用管理器命令
管理Windows10的PowerShell命令行使用记录
启动Windows11任务管理器的几种方法
应急状态启动磁盘管理器
命令操作Windows 10回退的秘密
基于Android Broadcast的短信安全监听系统的设计和实现
解析Windows10的内部命令
用好Windows 10任务管理器
宝箱4
利用RFC技术实现SAP系统接口通信
在Win 7下利用凭据管理器提高访问速度等