数据库的操作(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('创建对象失败')
try: abook = Book(title='Python', pub='清华大学出版社') abook.save print(abook) except: print('创建对象失败')
try: abook = Book() abook.title='Python' abook.pub='清华大学出版社' abook.save print(abook) except: print('创建对象失败')
三Django shell的使用
在Django的了提供交互式一个操作的项目叫Django Shell
它能够在交互模式用项目工程的代码执行相应的操作
利用Django Shell可以代替编写查看的代码来进行直接操作
在Django Shell下只能进行简单的操作,不能运行远程调式
启动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容器对象,内部存放
|
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() # 修改单条数据