一、使用数据库需要设置settings.py文件。

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
'ENGINE‘说明使用的是什么数据引擎,django中仅支持'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.这几种。
 'NAME’使用哪个数据库,在django中,框架可以生成数据表,但是不可以声称数据库,所以要自己手动创建好数据库。
'USER'数据库的用户名
2、如果django框架支持的操作满足不了开发需求,可以执行原生的SQL语句。
>>> from django.db import connection
>>> cursor = connection.cursor()

3、常用的几条命令:

python manage.py validate#检查models是否有语法错误

python manage.py startproject projectname

python manage.py startapp appname

python manage.py syncdb#将新建的表创建到数据库中,但是如果后期对表作了修改,在使用这条命令不会更新。此时应该使用下面两条命令,仅在django版本》=1.7时使用

python manage.py makemigrations

python manage.py migrate

4、创建models

from django.db import models
from django.template.defaultfilters import default class User(models.Model):
name =models.CharField(max_length=);
createTime = models.DateTimeField(auto_now=True);
updateTime = models.DateTimeField(auto_now_add=True);

5、当使用data=User.objects.all()方法时获得的是数据表记录对象的集合,我们可以使用一些有用的字符串来表示这些对象。可以添加一个类方法 __unicode__()

该方法返回一个代表该对象的字符串,是我们能够看到他就知道是那一条记录。

注意:该方法返回一个unicode对象,如果不是,比如数字,则返回一个TypeError

def __unicode__(self):
return self.name

6、使用User.objects.all()方法返回的数据是QuerySet对象,这个集合是由数据表中的记录组成的集合。

7、 将结果进行排序使用方法是order_by('name'),可以传递一个或多个参数。也可以按照逆序排列,只需要在列名前加一个减号-,例如order_by('-name')。

如果想要将查询结果默认赋予按照某一列排序,有如下方法:

在models文件的类中添加

class Meta:
ordering = ['name']

8、数据结果可以使用切片操作,但不可以使用负数。

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

Publisher.objects.order_by('name')[-1]

Traceback (most recent call last):

...
AssertionError: Negative indexing is not supported.

9、QuerySet有update() 方法

Publisher.objects.all().update(country='USA')

10、删除,使用对象的delete()方法,

>>> p = Publisher.objects.get(name="O'Reilly")

>>> p.delete()

>>> Publisher.objects.all()

[<Publisher: Apress Publishing>]

QuerySet也可以使用delete方法

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

11、获取QuerySet数据对象的某一列数据使用'.'运算符例如:

对于数据表studentinfo:

class StudentInfo(models.Model):

    name = models.CharField(max_length = ,default="");
studentID = models.CharField(max_length=,default="");
sex = models.CharField(max_length = ,default="");
age = models.IntegerField(default=);
address = models.TextField(default="");

想要获取name的值,

objs = StudentInfo.objects.get(studentID = id)#获取QuerySet对象
objs.name#获取name值

12 自动添加当前时间到数据库

时间域的三个类型DateTimeField和DateField和TimeField存储的内容分别对应着datetime(),date(),time()三个对象。其中有两个属性比较重要auto_now=False和auto_now_add=False,默认情况下都是false。

auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值。

auto_now_add=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的save()是可以手动赋值的。也就是新实例化一个model,想手动存其他时间,就需要对该实例save()之后赋值然后再save()。

13 字段中设置非必填项

有两个参数可以设置,是blank和null

1)如果是字符串类型的字段,仅设置blank=True即可,当像数据库中插入数据时,如果没有提供值,django会自动添加空串到对应字段中。但是对于其他数据类型比如日期、数字等字段则这样设置会出现错误。

2)如果是数字、日期等非字符串类型的字段,想让他是非必填项,可以设置blank=True,null=True.此时相当于在sql语句中去除了NOT NULL属性。

14 all():返回包含模式里所有数据库记录的QuerySet

filter():返回包含符合指定条件的模型记录的QuerySet

exclude():和filter相反,查找不符合条件的querySet

get():获取单个符合条件的记录,没有找到或者超过一个结果都会抛出异常。如果没有则是DoesNotExist,如果是多个结果MultipleObjectsReturned

15 QuerySet是一个容器,类列表的容器,实现了一部分列表的接口,比如执行迭代、索引、切片以及获取长度len。如果需要也可以使用list(QuerySet)转换成列表。

 
 

django中models阅读笔记的更多相关文章

  1. django中templates阅读笔记

    一.基本知识 1.模版是独立于django的,可以独立运行. 模版变量是用两个大括号括起来的字符串,表示变量.例如{{ person_name }} 模版标签,是用一对大括号和一对百分号括起来的,例如 ...

  2. Django中models定义的choices字典使用get_FooName_display()在页面中显示值

    问题 在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等等 看下例子: class Area(model ...

  3. django中models field详解

    本文参考自:django官方文档models/field 在model中添加字段的格式一般为:  field_name = field_type(**field_options) 一  field o ...

  4. django 中models表的多对一,多对多的理解

    django 表的理解 好处:设计的好,会清晰,易于理解和维护,后期开发事半功倍,一目了然. 1. 一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可: 2. 一对多的表,可以设中间关 ...

  5. Django Form Media 阅读笔记

    ---恢复内容开始--- Form Media Rendering an attractive and easy-to-use Web form requires more than just HTM ...

  6. django中models联合唯一unique_together

    例: 文章点赞 class ArticleUpDown(models.Model): """ 点赞表 """ nid = models.Au ...

  7. Django 源码阅读笔记(基础视图)

    django源码解读之 View View. ContextMixin.TemplateResponseMixin.TemplateView.RedirectView View class View( ...

  8. django中models字段的联合限制

    一.字段联合使用的限制设置: 有这么个需求,现有两个字段,A字段是选择用户是不是vip, B字段是统计用户的vip等级; 要求: 用户不是vip时,A选择false,B字段为空; 是vip时,A字段选 ...

  9. django中models的filter过滤方法

    __gt     大于__gte   大于等于 __lt      小于 __lte    小于等于 __in     存在于一个list范围内 __startswith    以...开头 __is ...

随机推荐

  1. android 随手记 摄像头录像

    1 xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:androi ...

  2. 转: 网卡名字eth0,eth1的修改方法

    转自:http://longwind.blog.51cto.com/419072/982738 我使用这个方法生效: 现象:只有eth2,    vi /etc/udev/rules.d/70-per ...

  3. Sqlserver存储过程生成日期维度

    话不多说,之前已经有一篇日志是利用oracle的存储过程生成日期维度表,接下来我们就用sqlserver来实现这个操作,如下面的步骤所示 1:创建日期维度表(Dim_time) USE [DW] GO ...

  4. 在Lotus Notes设置邮件转发

    Notes里面设置邮件转发,一种是创建一个Agent代理,但这种方式有弊端,就是邮件标题缺失,这个比较别扭.这里就不推荐了. 另一种方法是创建Rule规则,这种方式完美.具体方法如下: 1.点Tool ...

  5. MySQL的IFNULL函数

    MySQL函数里有一个很有用的函数IFNULL,它的形式是IFNULL(fieldA,fieldB),意义是当字段fieldA是NULL时取fieldB,不是NULL时取fieldA的值. 这个函数与 ...

  6. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  7. Discuz常见小问题-如何快速安装和配置

    下载PHPNOW 可以解压到本地的某个目录,最好不要有中文路径,然后查看Readme进行安装,双击Setup.cmd 安装结束之后,会要求输入一个初始化的密码,不要忘记,会自动弹出一个测试页面,可以测 ...

  8. JavsScript 之 求时间差

    var dateStart = new Date(); //开始时间var dateEnd = new Date(); //结束时间 var timePeriod = dateEnd.getTime( ...

  9. HTTP和Socket的区别

    1: HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. HTTP ...

  10. PHP高级教程-文件

    PHP 文件处理 fopen() 函数用于在 PHP 中打开文件. 打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来 ...