zoukankan      html  css  js  c++  java
  • django操作数据库 ORM

    一,数据库连接

      创建类
        a. 在models.py中先写类
          from django.db import models

          # 表名是app01_userinfo
          class UserInfo(models.Model):
          # id列,自增,主键
          # 用户名列,字符串类型,指定长度
          username = models.CharField(max_length=32)
          password = models.CharField(max_length=64)

        b. 注册APP,settings中加入app名称

          INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'app01',
          ]

        c,选定数据库 用sqlite3还是mysql

          DATABASES = {

            'default': {
            'ENGINE''django.db.backends.mysql',
            'NAME':'dbname',
            'USER''root',
            'PASSWORD''xxx',
            'HOST': '',
            'PORT': '',
           }
          }

        d. 执行命令,
          python manage.py makemigrations
          python manage.py migrate

         ********** 注意 ***********
        Django默认使用MySQLdb模块链接MySQL,也可安装mysqlclient,https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
        主动修改为pymysql,在project同名文件夹下的__init__文件中添加如下代码即可:
          import pymysql
          pymysql.install_as_MySQLdb()

    二,数据库增删查改

    models:
    
    from django.db import models
    
    # Create your models here.
    
    class userinfo(models.Model):
        username = models.CharField(max_length=32)
        password = models.CharField(max_length=64)
    
    views:
    
    from cmbd import models
    def orm(request):
    
        #创建 插入行
        #第一种方法
        # models.userinfo.objects.create(username="root",password=123)
        #第二种方法
        # dic = {"username":"eric","password":123}
        # models.userinfo.objects.create(**dic)
        #第三种方法
        # obj = models.userinfo(username="alex",password=666)
        # obj.save()
    
        #查询
        #result = models.userinfo.objects.all() #返回结果是django内置类,相当于结果列表,查询所有
        # result = models.userinfo.objects.filter(username="root",password='123') #按条件与查询,后面还可跟.first() .last() .count()第一个最后一个,共几个
        # for row in result:
        #     print(row.id,row.username,row.password)
    
        #更新
        # models.userinfo.objects.update(password=669) #更新所有列的密码
        # models.userinfo.objects.filter(id=1).update(password=69) #按条件更新
    
        #删除
        # models.userinfo.objects.filter(id=2).delete()  #删除id为2的行
    
        return HttpResponse('ok')
    

    三,修改表结构

    modules中
    
    from django.db import models
    class userinfo(models.Model):
        username = models.CharField(max_length=32)
        password = models.CharField(max_length=60)  
        email = models.EmailField(max_length=60)
        favior = models.CharField(max_length=12,null=True)
    
    直接在上面修改max_length=12,加一行即一个字段,删除一行即删除这个字段,
    然后 python manage makemigrations ;python manage migrate
    

    四,字段,参数,元信息等,详见 http://www.cnblogs.com/wupeiqi/articles/5246483.html

    		字段:  django中的 EmailFiled,DateTimeField等其实是django的限制,在mysql中还是字符串类型
    			字符串类型
    			数字		
    			时间
    			二进制
    			自增(primary_key=True)
    			
    		字段的参数:
    			null               -> db是否可以为空
    			default            -> 默认值
    			primary_key        -> 主键
    			db_column          -> 列名
    			db_index           -> 索引
    			unique			   -> 唯一索引
    			unique_for_date    -> 
    			unique_for_month
    			unique_for_year
    			auto_now_add           -> 创建时,自动生成时间,保持不变
    			auto_now       -> 更新时间,更新时自动更新为当前时间
    			
    				# obj = UserGroup.objects.filter(id=1).update(caption='CEO')  这种操作不支持,不会更新,更新时间,以下操作才支持
    				# obj = UserGroup.objects.filter(id=1).first()
    				# obj.caption = "CEO"
    				# obj.save()
    				
    			choices			  -> django admin中显示下拉框,避免连表查询
    			blank             -> django admin是否可以为空
    			verbose_name      -> django admin显示字段中文
    			editable          -> django admin是否可以被编辑
    			error_messages    -> 错误信息欠
    			help_text         -> django admin提示
    			validators		  -> django form ,自定义错误信息(欠)
    			
    			创建 Django 用户:python manage.py createsuperuser
    

      

    choices 举例,在数据库中user_type_id存放的是数据 ,但是django后台是显示用户类型汉字
    
    class userinfo(models.Model):
        username = models.CharField(max_length=32)
        password = models.CharField(max_length=60)
        email = models.EmailField(max_length=60)
        user_type_choice = (
            (1,'超级用户'),
            (2,'管理员'),
            (3,'普通用户'),
        )
        user_type_id = models.IntegerField(choices=user_type_choice,default=3)
    

      

  • 相关阅读:
    【LeetCode 15】三数之和
    【LeetCode 14】最长公共前缀
    【LeetCode 13】罗马数字转整数
    【LeetCode 12】整数转罗马数字
    【LeetCode 11】盛最多水的容器
    【LeetCode 10】正则表达式匹配
    【LeetCode 9】回文数
    【LeetCode 8】字符串转换整数 (atoi)
    【LeetCode 7】整数反转
    【LeetCode 6】Z 字形变换
  • 原文地址:https://www.cnblogs.com/alex-hrg/p/9710663.html
Copyright © 2011-2022 走看看