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)

  

原文地址:https://www.cnblogs.com/alex-hrg/p/9710663.html