tnblog
首页

python django 模型和数据库API

354人阅读 2019/1/6 8:47 评论:0 收藏
分类: python

模型字段类型:

CharField(max_length) 字符串 max_length:长度

BooleanField:布尔类型

DateField: 年月日,日期

DateTimeField:年月日 时分秒

auto_now_add: 第一次创建的时候赋值

auto_now:每次修改的时候赋值

AutoField:自动增长

IntegerField 整数

FloatField 浮点数

FileField() 文件

ImageField(upload_to=) upload_to='' 指定上传图片的路径

models.TextField 存文本信息

models.DecimalField(max_digits=3, decimal_places=1) 固定精度

max_digits 总位数 decimal_places 小数后几位

模型参数:

default: 默认 null :设置是否为空,针对数据库中该字段是否可以为空 blank :设置是否为空,针对表单提交该字段是否可以为空 primary_key:创建主键 unique:唯一

迁移数据库:

py manage.py makemigrations

py manage.py migrate

配置数据库连接:

pip install pymysql

加载数据库驱动:

在工程目录下init.py文件

import pymysql pymysql.install_as_MySQLdb()

修改setting.py文件

DATABASES = {

    'default': {

    'ENGINE': 'django.db.backends.mysql',   # postgresql / mysql / sqlite3 / oracle

    'NAME': 'model',  # 数据库名

    'USER': 'root',

    'PASSWORD': 'root',

    'HOST': 'localhost',  # 本地:localhost

    'PORT': '3306',  # 默认端口:3306

    }

}

模型都要继承models.Model

设置元信息:

设置元信息 定义表名 和默认排序规则 ordering=['(-/是倒序)question_id']

    class Meta:

        db_table='question'

设置人类可读的模型:

__str__

例如:

# 自定义管理器

class QuestionManager(models.manager):

    def create(self, question_id,question_text,pub_date):

        q=Question()

        q.question_id=question_id

        q.question_text=question_text

        q.pub_date=pub_date

        return q

# Create your models here

class Question(models.Model):

    question_id = models.IntegerField()

    question_text = models.CharField(max_length=200)

    pub_date = models.DateTimeField('date published')

# 设置元信息 定义表名 和默认排序规则 ordering=['(-/是倒序)question_id']

class Meta:

    db_table='question'

# 可读的类模型

def __str__(self):

    return self.question_text

# 指定另外一个管理器

QuestionOne=models.manager()

QuestionTwo=QuestionManager()

class Choice(models.Model):

    choice_id = models.IntegerField()

    question_id =models.IntegerField()

    choice_text =models.CharField(max_length=200)

def __str__(self):

    return self.choice_text

django的Rom API:

添加数据:save()  create()

修改数据:修改已经存在的对象save()     update()

删除数据:delete()

查询数据:

链式过滤,惰性执行

何时对查询集求值:迭代,序列化,与if合用

过滤器:

    all()

    filter()

    excluder()

    order_by()

    values():一个对象构成一个字典,然后构成列表返回

get()

查询集:一般都是缓存,当用子集的时候就不缓存

执行原生的sql语句:raw()

lanme='123'

.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])参数格式化

比较运算符:

Gt、gte、lt、lte

Startswith

endswith

Isnull

聚合函数:

aggregate(不会分组)

annotate(建议用这个会自动分组)

聚合函数都是在django.db.models模块下的,具体的聚合函数有Avg、Count、Max、Min、Sum,

自定义管理器:类 继承models.manager

模型指定管理器:QuestionTwo=QuestionManager()

例子:

from django.db import models

from django.db.models import F

import django.utils.timezone as timezone

# 自定义管理器

class QuestionManager(models.Manager):

        def create(self, question_id,question_text,pub_date):

            q=Question()

            q.question_id=question_id

            q.question_text=question_text

            q.pub_date=pub_date

            return q

# Create your models here.

# 类的属性

# object :是manager类型的对象

class Question(models.Model):

    question_id = models.IntegerField(primary_key=True)

    question_text = models.CharField(max_length=200)

    pub_date = models.DateTimeField('date published',default=timezone.now)

# 设置元信息 定义表名 和默认排序规则 ordering=['(-/是倒序)question_id']

class Meta:

    db_table='question'

# 可读的类模型

def __str__(self):

    return self.question_text

# 指定另外一个管理器

QuestionOne=models.Manager()

QuestionTwo=QuestionManager()

class Choice(models.Model):

    choice_id = models.IntegerField(primary_key=True)

    question_id =models.IntegerField()

    choice_text =models.CharField(max_length=200)

def __str__(self):

    return self.choice_text


评价

{{item.title}}

{{item.content}}
呼哈呼哈
博主搜索
文章类别
最新文章
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}