数据库的操作(CRUD操作)

数据库的操作(CRUD操作)

  CRUD是指在做计算处理时的增加(创建),读取查询(读),更新(更新)和删除(删除)

一管理器对象

1.每个继承自modelss.Model的模型类,都会有一个对象对象被同样继承下来。这个对象叫管理器对象2.数据库的增删改查可以通过模型的管理器实现

class Entry(models.Model):
    ...
Entry.objects.create(...) # 是管理器对象

二创建数据对象

Django使用一种直观的方式把数据库表中的数据表示成Python对象

创建数据中每一条记录就是创建一个数据对象

1.Entry.objects.create(属性1 =值1,属性2 =值1,...)

  成功:返回创建好的实体对象

  失败:抛出异常

2.创建Entry实体对象,并调用save()进行保存

obj = Entry(属性=值,属性=值)
obj.属性=值
obj.save()
无返回值,保存成功后,obj会被重新赋值
try:
    abook = Book.objects.create(title='Python', pub='清华大学出版社')
    print(abook)
except:
    print('创建对象失败')
示例1
try:
    abook = Book(title='Python', pub='清华大学出版社')
    abook.save
    print(abook)
except:
    print('创建对象失败')
示例2
try:
    abook = Book()
    abook.title='Python'
    abook.pub='清华大学出版社'
    abook.save
    print(abook)
except:
    print('创建对象失败')
示例3

Django shell的使用

  在Django的了提供交互式一个操作的项目叫Django Shell它能够在交互模式用项目工程的代码执行相应的操作

  利用Django Shell可以代替编写查看的代码来进行直接操作

  在Django Shell下只能进行简单的操作,不能运行远程调式

扫描二维码关注公众号,回复: 6859143 查看本文章

  启动Django shell显示IPython风格的交互界面如下:

$ python3 manage.py shell
manage.py shell
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.1.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: 
In [2]: from bookstore import models
In [3]: models.Book.objects.create(title="Python")
Out[3]: <Book: Book object>
In [4]: book = models.Book.objects.create(title='C++')
In [4]: print(book)
Book object

四查询数据

  数据库的查询需要使用管理器对象进行

  通过Entry.objects管理器方法调用查询接口

方法

用法

作用

返回值

all()

Entry.objects.all()

查询Entry实体中所有的数据

QuerySet容器对象,内部存放Entry实例

values('列1','列2')

Entry.objects.values(...)

查询部分列的数据并返回

从xxx中选择列1,列2

QuerySet

返回查询结果容器,容器内存字典,每个字典代表一条数据,

格式为:{'列1':值1,'列2':值2}

values_list( '列1', '列2')

Entry.objects.values_list(...)

返回元组形式的查询结果

QuerySet容器对象,内部存放元组

会将查询出来的数据封装到元组中,再封装到查询集合QuerySet的中

ORDER_BY

Entry.objects.order_by( ' - 列', '列')

与all()方法不同,它会用SQL语句的ORDER BY子句对查询结果进行根据某个字段选择性的进行排序

说明:默认是按照升序排序,降序排序则需要在列前增加 ' - ' 表示

filter(条件)

Entry.objects.filter(属性1=值1, 属性2=值2)

根据条件查询多条记录

QuerySet容器对象,内部存放Entry实例

#查找所有
from bookstore import models
books = models.Book.object.all()
for book in books:
    print("书名", book.title, '出版社:', book.pub)

######################

#查询返回指定列(字典表示)
from bookstore import models
books = models.Book.objects.values("title", "pub")
for book in books:
    print("书名", book["title"], '出版社:', book['pub'])
    print("book=", book)

#######################

#查询返回指定列(元组表示)
from bookstore import models
books = models.Book.objects.values_list("title", "pub")
for book in books:
    print("book=", book)  # ('Python', '清华大学出版社')...

#######################

#排序查询
from bookstore import models
books = models.Book.objects.order_by("price")
for book in books:
    print("书名:", book.title, '价格:', book.price)

#######################

#根据条件查询多条记录
# 1. 查询书中出版社为"清华大学出版社"的图书
from bookstore import models
books = models.Book.objects.filter(pub="清华大学出版社")
for book in books:
    print("书名:", book.title)

#2. 查询Author实体中id为1并且isActive为True的
    authors=Author.objects.filter(id=1,isActive=True)
示例演示

模型在类中定义def __str__(self):方法可以将自定义默认为字符串

class Book(models.Model):
    title = ...
    def __str__(self):
        return "书名: %s, 出版社: %s, 定价: %s" % (self.title, self.pub, self.price)

五字段查找

六查询谓词

七修改数据记录

八删除记录

九聚合查询

F对象

Q对象 - Q()

原生的数据库操作方法

#

# models.Tb1.objects.create(c1='xx', c2='oo')  增加一条数据,可以接受字典类型数据**kwargs

# obj = models.Tb1(c1='xx', c2='oo')
# obj.save()

#

# models.Tb1.objects.get(id=123)               获取单条数据,不存在则报错(不建议)
# models.Tb1.objects.all()                           获取全部
# models.Tb1.objects.filter(name='seven')  获取指定条件的数据

#

# models.Tb1.objects.filter(name='seven').delete()   删除指定条件的数据

#

# models.Tb1.objects.filter(name='seven').update(gender='0')   
# 将指定条件的数据更新,均支持 **kwargs
# obj = models.Tb1.objects.get(id=1)
# obj.c1 = '111'
# obj.save()                          # 修改单条数据
增删改查基础操作

猜你喜欢

转载自www.cnblogs.com/maplethefox/p/11235412.html