设为首页 加入收藏

TOP

05.Django基础五之django模型层(一)单表操作(六)
2019-09-24 11:16:42 】 浏览:287
Tags:05.Django 基础 django 模型 单表 操作
from django.db import connection #通过这种方式也能查看执行的sql语句 print(connection.queries) return HttpResponse('ok')

  

4、自定义字段(了解)

class UnsignedIntegerField(models.IntegerField):
    def db_type(self, connection):
        return 'integer UNSIGNED'

    自定义char类型字段:

class FixedCharField(models.Field):
    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        super().__init__(max_length=max_length, *args, **kwargs)
        self.length = max_length

    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为length指定的值
        """
        return 'char(%s)' % self.length


class Class(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用上面自定义的char类型的字段
    cname = FixedCharField(max_length=25) 

    创建的表结构:

img

       

    附ORM字段与数据库实际字段的对应关系:

'AutoField': 'integer AUTO_INCREMENT',
    'BigAutoField': 'bigint AUTO_INCREMENT',
    'BinaryField': 'longblob',
    'BooleanField': 'bool',
    'CharField': 'varchar(%(max_length)s)',
    'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
    'DateField': 'date',
    'DateTimeField': 'datetime',
    'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
    'DurationField': 'bigint',
    'FileField': 'varchar(%(max_length)s)',
    'FilePathField': 'varchar(%(max_length)s)',
    'FloatField': 'double precision',
    'IntegerField': 'integer',
    'BigIntegerField': 'bigint',
    'IPAddressField': 'char(15)',
    'GenericIPAddressField': 'char(39)',
    'NullBooleanField': 'bool',
    'OneToOneField': 'integer',
    'PositiveIntegerField': 'integer UNSIGNED',
    'PositiveSmallIntegerField': 'smallint UNSIGNED',
    'SlugField': 'varchar(%(max_length)s)',
    'SmallIntegerField': 'smallint',
    'TextField': 'longtext',
    'TimeField': 'time',
    'UUIDField': 'char(32)',

二、添加表纪录 

    在python中orm的对应关系有三种:

    类 ---------->表

    类对象 ---------->行(记录)

    类属性 ---------->表的字段(重点)

    首先想操作表的增删改查,你需要导入这个表 

#在逻辑代码中导入你要操作的表
from app01 import models

def add_book(request):
    '''
    添加表记录
    :param request: http请求信息
    :return:
    '''
    models.Book(title='python',price=123,pub_date='2012-12-12',publish='人民出版社') #pub_date=datetime.datetime.now(),这个字段直接给日期时间类型的数据也是可以的

方式1

book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12") #实例化一个对象表示一行记录,时间日期如果只写日期的话,时间默认是00.00.00,注意日期写法必须是2012-12-12这种格式
book_obj.save() #就是pymysql的那个commit提交

方式2(用的多)

# create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象
  book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")  #这个返回值就像是mysql里面咱们讲的那个new对象,还记得吗,他跟上面那种创建方式创建的那个对象是一样的  #这个Book.objects就像是一个Book表的管理器一样,提供了增删改查所有的方法  print(book_obj.title) #可以基于这个对象来取这个新添加的记录对象的属性值  dic1 = {'title':'linux','state'=True,'price':100,'publish'='2018-12-12'}  #这样写的时候,注意如果你用post提交过来的请求,有个csrf_token的键值对要删除,并且request.POST是不能直接在request.POST里面进行修改和删除的,data = request.POST.dict()转换成普通的字典-->Book.objects.create(**data)  book.objects.create(**dic1)

方式3:批量插入

    book_list = []
    for i in range(10):
        bk_obj = models.Book(
            name='chao%s'%i,
            addr='北京%s'%i
        )
        book_list.append(bk_obj)

    models.Book.objects.bulk_create(book_list) #批量插入,速度快

    update_or_create:有就更新,没有

首页 上一页 3 4 5 6 7 8 9 下一页 尾页 6/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇高强度学习训练第六天总结:Redis.. 下一篇装饰者模式,从吃黄焖鸡开始说起

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目