Shell
生成迁移文件
python manager.py makemigrations <appname>
执行迁移
python manager.py migrate
反向迁移
python manager.py inspectdb <appname>
ForeignKey属性
db_constraint
:当设置为False时,数据库中不存在连接,可以通过ER图看。on_delete
:可选字段:
models.CASCADE:级联删除
models.SET_NULL:设置为null,前提是null = True
models.SET_DEFAULT:设置为默认值,前提是有default属性,即default='what’
models.DO_NOTHING:什么都不做
models.PROTECT:删除时触发异常,保护数据related_name
:被关联模型类的对象可以通过此值来访问,可以看做本模型类在被关联模型类中的外键,设置为 + 不可访问。
QuerySet的方法
- get:可能引发异常
- filter:过滤(要)
- exclude:滤除(不要)
- reverse:反转
- all,所有结果
- exits:返回True或者False
- count:计数,不会查询数据集,比Len要好用
- order_by:按’field’排序,默认排序:在model定义的ordering
- values:将结果转换为字典的列表,每一个字典代表一个对象
- values_list:将每个对象的字段的值转换为元组,得到的一个元组的列表。
- exact,=
|
iexact:精确匹配/忽略大小写的精确匹配 - __contains / __icontains,__startswith / __istartswith , __endswith / __iendswith:包含 | 以什么开始 | 以什么结束
- __in
|
__range:集合运算 - __gt,__gte
|
__lt,__lte:大于,大于等于|
小于,小于等于 - aggregate()
/
annotate():用法类似,aggregate返回的是字典,其中可以指定key的值,annotate将计算结果作为属性附加到数据中。一般配合Count,Max,Min,AVG,Sum使用。 - raw,extra,可以写原生sql,可以将sql关键字作为参数;之外,可以通过建立连接,移动指针的方式写原生sql。
from django.db import connections
with connections['...'].cursor() as cursor:
cursor.execute('sql语句')
row = cursor.fetchall()
- F对象和Q对象:F对象用来操作当前查询的字段,或模型类中两字段的比较;Q对象用来进行复杂查询,可以通过
& | ~
进行与或非的查询
模型管理器
class BookManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()
class Book(models.Model