Django中操作数据库的3种方法
2021-12-06陈娜付沛
陈娜 付沛
摘要: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")