一、django的安装

  1.先安装python

  2.再安装django:pip install django

  3.使用虚拟环境:pip install virtualenv

二、项目的创建

  1.可以先创建一个虚拟目录

    创建虚拟目录:
        virtualenv --no-site-packages venv
    进入虚拟目录:
        source venv/bin/activate

  2.创建一个工程:

    创建:

      django-admin startproject projectName

    目录结构大致如下:

      

    启动服务:
        python manage.py runserver 0.0.0.0:8000

  3.创建app:

    进入projectName目录下运行:python manage.py startapp appName

    目录结构大致如下:

      

  4.创建模型:

    1.编辑model.py文件:如添加如下代码

 from django.db import models
from django.utils import timezone
import datetime
# Create your models here. class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') def __str__(self): # __unicode__ on Python 2
return self.question_text def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?' class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0) def __str__(self): # __unicode__ on Python 2
return self.choice_text

    注:类中相应的属性,对于数据库中表的相应列名

    2.编辑setting.py文件:

      1)修改数据库配置信息:(根据自己的数据库配置)

        DATABASES = {
          'default':{
          'ENGINE':'django.db.backends.mysql',
          'NAME':'pythontest',
          'USER':'root',
          'PASSWORD':'root',
          'HOST':'localhost',
          'PORT':'3306',
          }
        }

      2)修改INSTALLED_APPS,添加app:

        INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'appName',
        ]

    3.同步数据库:(项目根目录下执行)

      python manage.py makemigrations polls
         python manage.py migrate

------------------------------------------------------------------------------------------------

一.操作数据库

1.创建对象--save()

  obejct = Object(name1='value1', name2='value2')

  object.save()

  others:

  object = Object.objects.create(name1='value1', name2='value2')

2.保存对象的改动

  object.name1 = 'change value'

  object.save()

  更新ForeignKey 字段的方式和保存普通字段相同

  更新ManyToManyField 的方式有一些不同 —— 需要使用字段的add()方法来增加关联关系的一条记录。

3.获取对象:通过模型的管理器构造一个查询集,来从数据库中获取对象

  管理器只可以通过模型的类访问,而不可以通过模型的实例访问

  获取所有对象:all_object = Object.objects.all()

    all() 方法返回了一个包含数据库表中所有记录查询集

  过滤条件:filter(**kwargs)、exclude(**kwargs)

    filter(**kwargs):包含满足查询参数的对象

    exclude(**kwargs):包含不满足查询参数的对象

  链式过滤:Object.objects.filter(...).exclude(...).filter(......)

  查询集是惰性执行的:创建查询集不会带来任何数据库的访问。你可以将过滤器保持一整天,直到查询集 需要求值时,Django 才会真正运行这个查询。

  获取单一的对象:Object.objects.get(pk=1)   !!!不是返回查询集,如果对象不存在或有多条将报错

4.annotate(*args, **kwargs)

5.order_by()用来排序:默认情况下,QuerySet 根据模型Meta 类的ordering 选项排序

  Object.objects.filter(pud_date__year=2017).order_by('-pub_date','headline'):根据pub_date降序,headline升序排序

  每个order_by() 都将清除前面的任何排序。

6.reverse()

  reverse() 方法反向排序QuerySet 中返回的元素

7.distinct([*fields])

  返回一个在SQL 查询中使用SELECT DISTINCT的新QuerySet。它将去除查询结果中重复的行。

  对于正常的distinct()调用,数据库在确定哪些行不同时比较每行中的每个字段。对于具有指定字段名称的distinct()调用,数据库将仅比较指定的字段名称。

8.values(*fields)

  返回一个ValuesQuerySet —— QuerySet 的一个子类,迭代时返回字典而不是模型实例对象。

  Object.objects.values('id','name')

9.values_list(*fields,flat=False)

  在迭代时返回的是元组而不是字典

10.dates(field,kind,order='ASC')

  返回DateQuerySet - QuerySet,其计算结果为datetime.date对象列表,表示特定种类的所有可用日期QuerySetfield应为模型的DateField的名称。 kind应为"year""month""day"。隐式的是升序排序

11.datetimes(field_name,kind,order='ASC',tzinfo=None)

  返回QuerySet,其计算为datetime.datetime对象的列表,表示QuerySet内容中特定种类的所有可用日期.

  field_name应为模型的DateTimeField的名称。

  kind应为“year”“month”“day”“hour”“minute”“second”

12.extra(select=Nonewhere=Noneparams=Nonetables=Noneorder_by=Noneselect_params=None)

13.defer(*fields)

  在一些复杂的数据建模情况下,您的模型可能包含大量字段,其中一些可能包含大量数据(例如,文本字段),或者需要昂贵的处理来将它们转换为Python对象。如果您在某些情况下使用查询集的结果,当您最初获取数据时不知道是否需要这些特定字段,可以告诉Django不要从数据库中检索它们。

  具有延迟字段的查询集仍将返回模型实例

14.only(*fields)

  only()方法或多或少与defer()相反

15.using(alias)

  如果你使用多个数据库,这个方法用于控制QuerySet 将在哪个数据库上求值。这个方法的唯一参数是数据库的别名,定义在DATABASES

16.select_for_update(nowait=False)

  返回一个 queryset  ,会锁定相关行直到事务结束。在支持的数据库上面产生一个SELECT ...FORUPDATE语句

17.raw(raw_queryparams=Nonetranslations=None)

  接收一个原始的SQL 查询,执行它并返回一个django.db.models.query.RawQuerySet 实例。这个RawQuerySet 实例可以迭代以提供实例对象,就像普通的QuerySet 一样。

18.使用Q 对象进行复杂的查询

  可以组合& 和|  操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:

Q(question__startswith='Who') | ~Q(pub_date__year=2005)
Poll.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
翻译sql:
SELECT * from polls WHERE question LIKE 'Who%'
AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

19.为了比较两个模型实例,只需要使用标准的Python 比较操作符,即双等于符号:==。在后台,它会比较两个模型主键的值。

20.删除方法,为了方便,就取名为delete()。这个方法将立即删除对象且没有返回值。

Entry.objects.filter(pub_date__year=2005).delete()

21.拷贝模型实例

  最简单的方法是,只需要将pk 设置为None。利用我们的Blog 示例: 

  blog = Blog(name='My blog', tagline='Blogging is easy')
  blog.save() # blog.pk == 1
  blog.pk = None
  blog.save() # blog.pk == 2

---------------------------------------------------------------------------------------------

二、聚合

1.一般的聚合查询方法:

  Object.objects.count()

  Object.objects.all().aggregate(Avg('price'))

  Object.objects.all().aggregate(Max('price'))

  Object.objetcs.annotate(num_books=Count('book')).order_by('num_books')[:5]

  aggregate()QuerySet 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。

  逐个对象的汇总结果可以由annotate()子句生成。当annotate()子句被指定之后,QuerySet中的每个对象都会被注上特定的值。

  annotate()子句的返回结果是一个查询集 (QuerySet)

  order_by()用来排序

  Object.objects.all().order_by('name1')

  values()分组

  Object.objects.values('name').annotate(average_rating=Avg('book__rating'))

  根据定义在values()  子句中的字段组合先对结果进行唯一的分组,再根据每个分组算出注解值, 这个注解值是根据分组中所有的成员计算而得的

  

  

  

  

Django--20170905--笔记的更多相关文章

  1. Django 学习笔记之四 QuerySet常用方法

    QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的. 1.建立模型: 2.数据文件(test.txt) 3.文件数据入库(默认的sqlite3) 入库之前执行 数据库同步命 ...

  2. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  3. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  4. Django学习笔记(三)—— 型号 model

    疯狂暑期学习 Django学习笔记(三)-- 型号 model 參考:<The Django Book> 第5章 1.setting.py 配置 DATABASES = { 'defaul ...

  5. Django入门笔记

    Django入门笔记 **文档包含Django安装包.学习的笔记.代码等 安装 Django参考附件,只需要把附件拷贝到你需要的目录就行.Django是1.8.16版本 Python:在附件中,其中有 ...

  6. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  7. Django 学习笔记(五)模板标签

    关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...

  8. Django 学习笔记(四)模板变量

    关于Django模板变量官方网址:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.传入普通变量 在hello/Hell ...

  9. Django 学习笔记(三)模板导入

    本章内容是将一个html网页放进模板中,并运行服务器将其展现出来. 平台:windows平台下Liunx子系统 目前的目录: hello ├── manage.py ├── hello │ ├── _ ...

  10. Django 学习笔记(七)数据库基本操作(增查改删)

    一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...

随机推荐

  1. 非常简单的一个函数 竟然一直没有使用 find()

    find: 在非string类型的容器里,可以直接找出所对应的元素. find函数需要几个参数:迭代器,下标值,所要找的元素 vector<int> a; find(a.begin(),a ...

  2. MySQL是如何做到安全登陆

    首先Mysql的密码权限存储在mysql.user表中.我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情.在mysql.user表中有个authentication_s ...

  3. java 高精度 四则运算

    java的大数处理对于ACM中的大数来说,相当的简单啊: 整数的运算   BigInteger 小数的运算   BigDecimal 导入类: import java.util.Scanner; im ...

  4. Excel TargetRange.Validation为空的

    做Excel的时候遇到过TargetRange.Validation为空,赋值类似空指针一样的情况. 这样的情况,不懂Excel调试了好久,最后还知道,这个对象需要自己去定义才能够进行赋值, 这样定义 ...

  5. linux 驱动cc1101

    cc110x.h /*  * File:   cc110x.h * Author: elinux * * Created on 2015年4月7日, 上午10:32 */ #ifndef CC110X ...

  6. Spider Studio 新版本 (20140225) - 设置菜单调整 / 提供JQueryContext布局相关的方法

    这是年后的第一个新版本, 包含如下: 1. 先前去掉的浏览器设置功能又回来了! 说来惭愧, 去掉了这两个功能之后发现浏览经常会被JS错误打断, 很不方便, 于是乎又把它们给找回来了. :) 2. 为J ...

  7. Linux(centOS)手动安装删除Apache+MySQL+PHP+Memcached原创无错版

    =================== 第一步:Apache安装 =================== 下载 去 http://www.apache.org 自己找最新的 国内有很多镜像点例如人人和 ...

  8. Dalvikvm工具

    dalvikvm:创建一个虚拟机并运行參数指定的java类. 1.新建一个java文件:例如以下: public class Test_07_22 { public static void main( ...

  9. MongoDB(一):关系型数据库和非关系型数据库

    一.关系型数据库 1.概念 关系型数据库:是指采用了关系模型来组织数据的数据库,是目前各类数据库中使用最为广泛的数据库系统.简单的说,关系模型指的就是二维表格模型,一个关系型数据库就是由二维表及其之间 ...

  10. DELETE 语句用于删除表中的行。

    DELETE FROM 表名称 WHERE 列名称 = 值