zoukankan      html  css  js  c++  java
  • python 第五十九章 orm单表操作

    orm单表操作 对象关系映射(object relational mapping)

    orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执行

    orm介绍

    django 连接mysql
    1 settings配置文件中
    	DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'orm02',
                'USER':'root',
                'PASSWORD':'666',
                'HOST':'127.0.0.1',
                'PORT':3306,
            }
        }
    2 项目文件夹下的init文件中写上下面内容,用pymysql替换mysqldb
    	import pymysql
    	pymysql.install_as_MySQLdb()
    
    3 models文件中创建一个类
    
    # class UserInfo(models.Model):
    #     id = models.AutoField(primary_key=True)
    #     name = models.CharField(max_length=10)
    #     bday = models.DateField()
    #     checked = models.BooleanField()
    4 执行数据库同步指令,添加字段的时候别忘了,该字段不能为空,所有要么给默认值,要么设置它允许为空 null=True
    # python manage.py makemigrations
    # python manage.py migrate
    
    5 创建记录(实例一个对象,调用save方法)
    def query(request):
        # 创建一条记录,增
    
        new_obj = models.UserInfo(
            id=2,
            name='子文',
            bday='2019-09-27',
            checked=1,
    
        )
        new_obj.save()  #翻译成sql语句,然后调用pymysql,发送给服务端  insert into app01_userinfo values(2,'子文','2019-09-27',1)
    
        return HttpResponse('xxx')
    

    增:

    方式1:
        new_obj = models.UserInfo(
            id=2,
            name='子文',
            bday='2019-09-27',
            checked=1,
    
        )
        new_obj.save() 
    方式2:
    	# ret 是创建的新的记录的model对象(重点)
    	ret = models.UserInfo.objects.create(
            name='卫贺',
            bday='2019-08-07',
            checked=0
        )
    
        print(ret)  #UserInfo object  卫贺
        print(ret.name)  #UserInfo object
        print(ret.bday)  #UserInfo object
    
    
    

    时间问题

    models.UserInfo.objects.create(
            name='杨泽涛2',
            bday=current_date,
            # now=current_date,  直接插入时间没有时区问题
            checked=0
        )
    	但是如果让这个字段自动来插入时间,就会有时区的问题,auto_now_add创建记录时自动添加当前创建记录时的时间,存在时区问题
    now = models.DateTimeField(auto_now_add=True,null=True)
    解决方法:
        settings配置文件中将USE_TZ的值改为False
        # USE_TZ = True
        USE_TZ = False  # 告诉mysql存储时间时按照当地时间来寸,不要用utc时间
    使用pycharm的数据库客户端的时候,时区问题要注意
    

    简单查询:filter()  -- 结果是queryset类型的数据里面是一个个的model对象,类似于列表
    	models.UserInfo.objects.filter(id=7).delete()  #queryset对象调用
    	models.UserInfo.objects.filter(id=7)[0].delete()  #model对象调用
    

    方式1:update
        # models.UserInfo.objects.filter(id=2).update(
        #     name='篮子文',
        #     checked = 0,
        #
        # )
        # 错误示例,model对象不能调用update方法
        # models.UserInfo.objects.filter(id=2)[0].update(
        #     name='加篮子+2',
        #     # checked = 0,
        # )
    方式2 
        ret = models.UserInfo.objects.filter(id=2)[0]
        ret.name = '加篮子+2'
        ret.checked = 1
        ret.save()
        
    
    更新时的auto_now参数
    	# 更新记录时,自动更新时间,创建新纪录时也会帮你自动添加创建时的时间,但是在更新时只有使用save方法的方式2的形式更新才能自动更新时间,有缺陷,放弃
        now2 = models.DateTimeField(auto_now=True,null=True)
    
  • 相关阅读:
    《面试系列一》一个怂到极点的开始
    NuGet 私房服务使用帮助
    Nuspec 范本文件
    送给前线码农的话 – 大牛们的经典语录
    Visual Studio 增加源码头注释
    为 Orchard 增加 MVC 的脚手架.
    为 Orchard 增加扩展的存储位置
    Orchard 瘦身优化
    Hybrid Multiple Attention Network for Semantic Segmentation in Aerial Images
    【nvidia jetson xavier】 Linux系统安装+Deepstream 5.1环境部署
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11637573.html
Copyright © 2011-2022 走看看