zoukankan      html  css  js  c++  java
  • Python Day73django ORM模型

    python的类名--------------->SQL语句的表名
    python的类属性--------------->SQL语句的表名下的字段
    python的类属性的约束--------------->SQL语句的表名下的字段类型   
    类的实例对象--------------->表中的一条记录

    一、创建表(建立模型

    1、创建类(创建表)

      在应用的models.py文件中创建类,如下例:

    from django.db import models
    class Student(models.Model):                                           #必须继承models.Model类
        sid=models.AutoField(primary_key=True)                             #主键且自增
        name=models.CharField(max_length=11)                               #字符串类型,且最大字符数为11
        birth=models.DateField()                                           #日期类型,如:Y-m-d

      然后在terminal执行如下两条命令后,会自动执行models.py文件,将定义的类生成对应的表:

    python manage.py makemigrations
    python manage.py migrate

      如果我们需要在已经建好的表中增加字段,那么我们只需要在对应的类中增加字段,然后重新执行上述两条命令即可,但是需要强调的是,增加的字段必须设置默认值,否则执行命令时会成功。设置默认值是为了保证之前已经插入的数据行的新增字段有值。如下例:

    from django.db import models
    class Student(models.Model):  
        sid=models.AutoField(primary_key=True) 
        name=models.CharField(max_length=11) 
        birth=models.DateField()            
        age=models.IntegerField( default=3)                                 #整数类型,为后来新增字段,需要设置默认值

    二、添加数据

      models文件只负责定义类(创建表),表数据的增删改查是在views视图函数中执行,如下添加数据实例:

    复制代码
    from app01.models import Student
    def add(request):
        if request.method=="POST":
            stu_name=request.POST.get("name")
            stu_birth=request.POST.get("birth")
            stu_age=request.POST.get("age")
            #方式一:
            s=Student(name=stu_name,birth=stu_birth,age=stu_age)
            s.save()                                                                                   #保存数据到数据库
            #方式二:
            Student.objects.create(name=stu_name,birth=stu_birth,age=stu_age)
            return redirect("/index/")
        return render(request,"add.html")
    复制代码

      上述实例需要注意一点:虽然models.py文件和views.py文件在同一应用目录下,但是在上述引用模块时不能写成from models import Student,因为执行我们项目的文件是manage.py文件,并不与应用app01下的文件在同一级目录,而是与app01文件同级,所以根本找不到对应的模块。

      表数据的增删改查操作,其实会被翻译成相应的sql语句,在setting文件中进行如下设置,即可在进行数据操作时在屏幕打印相应的sql语句:

    复制代码
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    } 
    复制代码

      执行添加函数后屏幕打印的结果:

     三、编辑数据

      首先按照ORM方式,查询到符合要求的queryset对象,然后update()将符合要求的对象进行更新,实例如下:

    复制代码
    from app01.models import Student
    def edit(request,id):
        if request.method=="POST":
            stu_name=request.POST.get("name")
            stu_birth=request.POST.get("birth")
            stu_age=request.POST.get("age")
            Student.objects.filter(tid=id).update(name=stu_name,birth=stu_birth,age=stu_age)
            return redirect("/index/")
        stu=Student.objects.filter(tid=id)[0]
        return render(request,"edit.html",{"stu":stu})
    复制代码

     四、删除数据

       首先按照ORM方式,查询到符合要求的queryset对象,然后delete()将符合要求的对象进行删除,实例如下:

    def delet(request,id):
        Student.objects.filter(tid=id).delete()
        return redirect("/index/")
  • 相关阅读:
    delphi不同版本字符串类型的演化(要支持基于firemonkey的app调用,字符串最好使用olevariant类型)
    IdHttpServer实现webservice(130篇DataSnap文章)
    hdu 1809 求SG函数
    delphi中无类型文件读写
    delpi中的RTTI初试
    后台调用外部程序的完美实现(使用CreateDesktop建立隐藏桌面)
    delphi之完美Splash方案(在TfrmMain.FormCreate里不断调用TfrmSplash显示加载进度文字,并且及时Update显示)
    查看内存数据的函数(ByteToHex和ByteToBin,最终都变成String)
    SQLsever2008 远程连接错误 linq
    delphi 利用HTTP的POST方法做个在线翻译的小工具 good
  • 原文地址:https://www.cnblogs.com/liuduo/p/8000608.html
Copyright © 2011-2022 走看看