1.创建一个django app:

python manage.py startapp books

2.validate 命令检查你的模型的语法和逻辑是否正确。一旦你觉得你的模型可能有问题,运行 python manage.py validate 。 它可以帮助你捕获一些常见的模型定义错误。

3.django1.7后,数据库迁移只有三个命令

(1)migrate,用来迁移数据库。

用法:

python manage.py migrate app_name

(2)makemigrations,用来检测数据库变更和生成数据库迁移文件。

用法:

python manage.py makemigratioins app_name

(3)sqlmigrate,用来把数据库迁移文件转换成数据库语言查看(displays the SQL statements for a migratioin.)

用法:sqlmigrate app_name migration_name,比如makemigrations生成了0001_initial.py,就用sqlmigrate app 0001_intial,这里0001_initial就是migration_name参数。

python manage.py sqlmigrate app_name 0001_initial

一般如果某次migration使用sqlmigrate没有提示错误,那么在migrate时就能成功。

4.终端上输入 python manage.py 可以看到详细的命令列表,在忘记命令子名称的时候特别有用。

5.Django为模型提供了高级的Python API:

(1)创建并保存对象实例

>>> 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>]

当使用Django modle API创建对象时Django并未将对象保存至数据库内,除非调用`` save()`` 方法。

如果需要一步完成对象的创建与存储至数据库,就使用`` objects.create()`` 方法。

>>> p1 = Publisher.objects.create(name='Apress',
... address='2855 Telegraph Avenue',
... city='Berkeley', state_province='CA', country='U.S.A.',
... website='http://www.apress.com/')
>>> p2 = Publisher.objects.create(name="O'Reilly",
... address='10 Fawcett St.', city='Cambridge',
... state_province='MA', country='U.S.A.',
... website='http://www.oreilly.com/')
>>> publisher_list = Publisher.objects.all()
>>> publisher_list

(2)为了把不同对象实例区分开,可以用__unicode()__方法给他们起名字。

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() def __unicode__(self):
return self.name

这样的话:

>>> from books.models import Publisher
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Apress>, <Publisher: O'Reilly>]

(3)对某一个字段修改后再save,所有字段都会更新。所以要更改某一指定的列,我们可以调用结果集(QuerySet)对象的update()方法,更好。

>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
>>> Publisher.objects.all().update(country='USA')

(4)数据过滤

>>> Publisher.objects.filter(country="U.S.A.", state_province="CA")#多个参数相当于SQL里的AND语句
[<Publisher: Apress>]

name__contains相当与SQL的LIKE语句

>>> Publisher.objects.filter(name__contains="press")
[<Publisher: Apress>]
#相当于以下
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE name LIKE '%press%';

(5)上面的例子中filter()函数返回一个记录集,这个记录集是一个列表。 相对列表来说,有些时候我们更需要获取单个的对象,get()方法就是在此时使用的:

>>> Publisher.objects.get(name="Apress")
<Publisher: Apress>

如果结果是多个对象或者没有对象,会抛出异常。

(6)数据排序

>>> Publisher.objects.order_by("address")
[<Publisher: O'Reilly>, <Publisher: Apress>] >>> Publisher.objects.order_by("state_province", "address")#第一个参数相同的话,按后面的参数排
[<Publisher: Apress>, <Publisher: O'Reilly>] >>> Publisher.objects.order_by("-name")#逆向排
[<Publisher: O'Reilly>, <Publisher: Apress>]

也可以规定默认的顺序:

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() def __unicode__(self):
return self.name class Meta:
ordering = ['name']

(7)可以写成链式查询:

>>> Publisher.objects.filter(country="U.S.A.").order_by("-name")
[<Publisher: O'Reilly>, <Publisher: Apress>] #相当于以下:
SELECT id, name, address, city, state_province, country, website
FROM books_publisher
WHERE country = 'U.S.A'
ORDER BY name DESC;

(8)限制返回的数据:

>>> Publisher.objects.order_by('name')[0:2]
>>> Publisher.objects.order_by('name')[0]

注意这里不支持python的负索引。

(9)删除:

>>> Publisher.objects.all().delete()

>>> Publisher.objects.filter(country='USA').delete()

6.

django学习笔记(三)模型的更多相关文章

  1. Django 学习笔记之模型高级用法

    目录 1 复杂的字段类型 1.1 整数类型的区别 1.2 自增类型的区别 1.3 时间类型 1.4 FilePathField 1.5 FileField 1.6 ImageField 2 关系字段 ...

  2. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

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

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

  4. Django:学习笔记(6)——模型

    Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...

  5. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  6. Django:学习笔记(7)——模型进阶

    Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...

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

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

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

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

  9. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  10. Django学习笔记(4)——Django连接数据库

    前言 在MVC或者MTV设计模式中,模型(M)代表对数据库的操作.那么如何操作数据库呢?本小节就认真学习一下.首先复习一下Django的整个实现流程 ,然后再实现一下使用数据库的整个流程,最后学习一下 ...

随机推荐

  1. saltstack之用户管理

    1.添加用户 /srv/salt/top.sls base: 'test82.salt.cn': - user.useradd /srv/salt/user/useradd.sls jim: user ...

  2. Android中经常使用的工具类02

    1.读取手机联系人信息 一般用在读取手机通讯录上传,这一块比較多. import java.util.ArrayList; import java.util.List; import android. ...

  3. MySQL查询优化程序

    1.利用EXPLAIN 语句,查看是否用到索引: EXPLAIN 2.下面的WHERE 子句说明了怎样进行这项工作.第一行中,优化程序将简化表达式4/2 为值2,然后使用my_col 上的索引快速地找 ...

  4. python 正則表達式推断邮箱格式是否正确

    import re def validateEmail(email):     if len(email) > 7:         if re.match("^.+\\@(\\[?) ...

  5. 服务器buff管理

    关于buff和玩家自动回血buff { m_StatusTimer.reset(pFT->createTimer()); m_StatusTimer->setInterval(); m_S ...

  6. 软件测试人员需要精通的开发语言(2)--- SQL

    简单的入门语言vbs,通过实例的练习以及简单的应用,基本可以掌握vbs脚本的使用.如果说vbs只是为了实际测试中开发脚本,便捷测试的目的.那SQL语言就是测试人员的必备技能了,任何系统都会用到数据库, ...

  7. 九度OJ 1182:统计单词 (计数)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3920 解决:1443 题目描述: 编一个程序,读入用户输入的,以"."结尾的一行文字,统计一共有多少个单词,并分别输出 ...

  8. 5.设计模式----prototype原型模式

    原型模式:做到是原型,那肯定是自己本身才是原型,原型模式属于对象的创建模式. 关于原型模式的实现方式分2种: (1)简单形式.(2)登记形式,这两种表现形式仅仅是原型模式的不同实现. package ...

  9. OOP中的逆变和协变

    逆变和协变在存在于强类型语言中,尽管非常少提及.可是里面蕴含了面向对象的世界观.感谢和我一起讨论这个问题的人. 这里用了C#.Scala的语法作为演示样例.事实上逆变和协变的概念跟语言本身关系不大.事 ...

  10. LeetCode:最长回文子串【5】

    LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...