认识django2.0读书笔记(5)---第五章 模型(django数据库层)
2013-11-28 14:51
381 查看
文档下载地址:Django_2.0_中文教程 http://download.csdn.net/detail/julius_lee/6620099
在线地址:http://djangobook.py3k.cn/2.0/
Django 2.0 Book 关键内容记录,主要是为了帮助记忆和理清整个框架,同时以后忘了可以查看,回想。
示例:
检测方法:
运行python manage.py shell
输入:
Project:包含多个django app 多个以及相关配置
App:一套django功能的集合,通常包含模型和视图
1) 在mysite目录下创建books app
Python manage.py startapp books
创建目录如下:
books/
__init__.py
models.py
tests.py
views.py
1) 第一个模型:在books下编辑models.py
示例:图书管理
每个模型相当于单个数据表,每个属性是表中的一个字段,属性名就是字段名,类型相当于数据库的字段类型,即charField相当于varchar
对应的数据库描述实际是这样的:
实际是python类与数据库表建立对应的映射关系
2) 模型安装
1.即在数据库中创建数据库表
在settings.py文件中添加app- books
1. 验证模型有效性
Python manage.py validate
检查逻辑和语法
2. 生成TABLE
Python manage.py sqlall books
3. 提交SQL语句到数据库
Python manage.py syncdb
3) 数据访问
模型创建后,django就会为该模型提供python API
示例:
4)添加模块的字符串表现
对各个如publisher的类添加__unicode__()方法,返回对一个对象处理后的字符串表示
这样对象列表显示就变了:
5)插入和更新数据
示例:
这样可以插入很多很多
6)选择对象
示例:
7)数据过滤–filter()
示例:
或
你可以传递多个参数到 filter()来缩小选取范围:
8)获取单个对象–get()
示例:
含异常处理的:
9)数据排序–order_by
示例:
10)连锁查询–过滤加排序
示例:
11)限制返回数据—按需索取
示例:
12)更新多个对象
示例:
13)删除对象
示例:
删除部分
删除全部
在线地址:http://djangobook.py3k.cn/2.0/
Django 2.0 Book 关键内容记录,主要是为了帮助记忆和理清整个框架,同时以后忘了可以查看,回想。
1、 在视图中进行数据库查询
旧方法弊端:创建数据库连接、创建数据库游标、执行某个语句、然后关闭数据库。反复重复同样的代码。示例:
from django.shortcuts import render_to_response import MySQLdb def book_list(request): db = MySQLdb.connect(user='me', db='mydb', passwd='secret',host='localhost') cursor = db.cursor() cursor.execute('SELECT name FROM books ORDER BY name') names = [row[0] for row in cursor.fetchall()] db.close() return render_to_response('book_list.html', {'names': names})
2、 MTV开发模式
结合之前的MVC(model-view-control)模式将数据存取逻辑、业务逻辑和表现逻辑组合在一起的软件架构,MTV开发模式则为:model-template-view,即数据存取层-表现层-业务逻辑层。3、 数据库配置
配置mysite/settings.py文件# Database #https://docs.djangoproject.com/en/1.6/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }这一部分和教程上有些不一致,教程上比较旧,还需要手动配置。目前实际使用中是直接已经配置好,无需过多修改。
检测方法:
运行python manage.py shell
输入:
from django.db import connection cursor = connection.cursor ()查看是否有报错
4、 第一个app
Project与app区别:Project:包含多个django app 多个以及相关配置
App:一套django功能的集合,通常包含模型和视图
1) 在mysite目录下创建books app
Python manage.py startapp books
创建目录如下:
books/
__init__.py
models.py
tests.py
views.py
5、 python 代码中定义模型
对数据层来说它等同于CREATE TABLE 语句,只不过执行的是Python代码而不是 SQL,而且还包含了比数据库字段定义更多的含义。 Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。1) 第一个模型:在books下编辑models.py
示例:图书管理
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()
每个模型相当于单个数据表,每个属性是表中的一个字段,属性名就是字段名,类型相当于数据库的字段类型,即charField相当于varchar
对应的数据库描述实际是这样的:
CREATE TABLE "books_publisher" ( "id" serial NOT NULL PRIMARY KEY, "name" varchar(30) NOT NULL, "address" varchar(50) NOT NULL, "city" varchar(60) NOT NULL, "state_province" varchar(30) NOT NULL, "country" varchar(50) NOT NULL, "website" varchar(200) NOT NULL );
实际是python类与数据库表建立对应的映射关系
2) 模型安装
1.即在数据库中创建数据库表
在settings.py文件中添加app- books
# Application definition INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'books', )
1. 验证模型有效性
Python manage.py validate
检查逻辑和语法
2. 生成TABLE
Python manage.py sqlall books
3. 提交SQL语句到数据库
Python manage.py syncdb
3) 数据访问
模型创建后,django就会为该模型提供python API
示例:
>>> from books.models import Publisher >>> p1 = Publisher(name='Apress',address='2855 Telegraph Avenue', ... city='Berkeley', state_province='CA', country='U.S.A.', ... website='http://www.apress.com/') >>> p1.save() >>> p2 = Publisher(name="O'Reilly",address='10 Fawcett St.', ... city='Cambridge', state_province='MA', country='U.S.A.', ... website='http://www.oreilly.com/') >>> p2.save() >>> publisher_list =Publisher.objects.all() >>> publisher_list [<Publisher: Publisher object>,<Publisher: Publisher object>]导入publisher模型类,创建publisher类的实例,调用save()保存对象至数据库
4)添加模块的字符串表现
对各个如publisher的类添加__unicode__()方法,返回对一个对象处理后的字符串表示
这样对象列表显示就变了:
>>> from books.models importPublisher >>> publisher_list =Publisher.objects.all() >>> publisher_list [<Publisher: Apress>, <Publisher:O'Reilly>]#直接显示了出版社名字
5)插入和更新数据
示例:
>>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... city='Berkeley', ... state_province='CA', ... country='U.S.A.', ... website='http://www.apress.com/') >>> p.save()
这样可以插入很多很多
6)选择对象
示例:
>>> Publisher.objects.all() [<Publisher: Apress>, <Publisher:O'Reilly>]
7)数据过滤–filter()
示例:
>>>Publisher.objects.filter(name='Apress') [<Publisher: Apress>]
或
你可以传递多个参数到 filter()来缩小选取范围:
>>>Publisher.objects.filter(country="U.S.A.",state_province="CA") [<Publisher: Apress>]
8)获取单个对象–get()
示例:
>>>Publisher.objects.get(name="Apress") <Publisher: Apress>
含异常处理的:
try: p= Publisher.objects.get(name='Apress') except Publisher.DoesNotExist: print "Apress isn't in the database yet." else: print "Apress is in the database."
9)数据排序–order_by
示例:
>>>Publisher.objects.order_by("name") [<Publisher: Apress>, <Publisher:O'Reilly>]
10)连锁查询–过滤加排序
示例:
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name") [<Publisher: O'Reilly>,<Publisher: Apress>]
11)限制返回数据—按需索取
示例:
>>>Publisher.objects.order_by('name')[0] <Publisher: Apress>
12)更新多个对象
示例:
>>>Publisher.objects.filter(id=52).update(name='Apress Publishing') #id需要查询获得 或: >>>Publisher.objects.all().update(country='USA') #更新并返回更改的数目
13)删除对象
示例:
删除部分
>>>Publisher.objects.filter(country='USA').delete() 或 >>> p =Publisher.objects.get(name="O'Reilly") >>> p.delete() >>> Publisher.objects.all() [<Publisher: Apress Publishing>]
删除全部
>>>Publisher.objects.filter(country='USA').delete() >>>Publisher.objects.all().delete() >>> Publisher.objects.all() []
相关文章推荐
- The Definitive Guide To Django 2 学习笔记(九) 第五章 模型 (一)数据库访问
- 认识django2.0读书笔记(7)---第七章 表单
- 通过数据库向Django模型添加字段的示例
- Django模型--数据库操作
- Django数据模型动态增删字段(更改数据库模式)
- Django根据现有数据库,自动生成models模型文件
- 认识django2.0读书笔记(3)---第三章 视图和URL配置
- python初学-04django(数据库,模型)
- Django项目实践(二)数据库配置和模型的创建
- django Model模型二及Model模型对数据库的操作
- Django 之 (6)模型(数据库)
- Django 模型(数据库)
- Django模型数据库
- Django中的模型与数据库(Models and database)
- django python query Making queries -- 模型的数据库查询 good
- django专题—数据模型、数据库访问、数据传递
- Django教程:[33]从数据库生成模型
- 通过数据库对Django进行删除字段和删除模型的操作
- django 模型更改后如何更新至数据库(暴力版)
- Django 1.10.2 模型数据库操作