美文网首页
2018-09-11 Django与mysql

2018-09-11 Django与mysql

作者: BIGBOSS_93d6 | 来源:发表于2018-09-11 19:52 被阅读0次

    1.数据库准备

    首先通过cmd创建项目
    用cmd进入自己下载好的环境文件目录,开启虚拟环境,然后输入指令

    django-admin startproject day01
    

    day01为项目文件名,在创建好的项目文件中进行虚拟环境配置,配置完成后,然后创建app
    让数据库与Django框架进行链接,将settings.py文件中DATABASES的数据进行以下修改

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'dj5',
            'USER':'root',
            'PASSWORD':'123456',
            'HOST':'127.0.0.1',
            'PORT':3306
    
        }
    }
    

    然后将settings.py文件中的LANGUAGE_CODE修改为

    LANGUAGE_CODE = 'zh-hans'
    

    目的在于让网页显示的内容为中文显示
    在day01的init.py文件中添加内容

    import pymysql
    
    pymysql.install_as_MySQLdb()
    

    这样就完成了py文件与数据库之间的链接,之后进行app的简单操作
    在model中定义数据库,其中的性别,男的存1,女的存0。

    from django.db import models
    
    # Create your models here.
    class Student(models.Model):
        s_name=models.CharField(max_length=10,unique=True,verbose_name='姓名')
        s_age=models.IntegerField(default=16,verbose_name='年龄')
        s_sex=models.BooleanField(default=1,verbose_name='性别')
        create_time=models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
        operate_time=models.DateTimeField(auto_now=True,verbose_name='修改时间')
    
        class Meta:
            db_table='student'
    
    

    接着在urls.py中添加url例如:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url('create_stu/',views.create_stu),
        url('select_stu/',views.select_stu),
        url('delete_stu/',views.delete_stu),
        url('update_stu/',views.update_stu),
    ]
    

    其中除第一条是Django自带,其它全为添加项
    然后在views中添加类方法来对应自己添加的url项,例如:

    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    from app.models import Student
    
    def create_stu(request):
        # 创建学生信息
        # 引入ORM概念:对象关系映射
        # Student.objects.create(s_name='小小')
        # 第二种方法
        stu=Student()
        stu.s_name='小红'
        stu.save()
        return HttpResponse('创建学生信息的方法')
    

    2.数据库迁移

    python manage.py makemigrations
    python manage.py migrate
    
    

    数据库迁移可以做到把自己创建的数据迁移到以连接的数据库中,可以通过navicat软件(方便操作)进行查看自己转移的数据

    数据的增删改查

    3. 数据插入

    3.1 使用表单form提交post请求数据
    <form action="/app/addStu/" method="post">
        stuname: <input type="text" name="name">
        stusex: <input type="text" name="sex">
        stubirth: <input type="date" name="birth">
        stutel: <input type="text" name="tel">
        <input type="submit" value="提交">
    </form>
    
    
    3.2 获取post请求,获取请求数据,并且创建数据
    方法1:获取类对象进行save()保存
    stu = Student()
    stu.stuname = stuname
    stu.stusex = sex
    stu.stubirth = birth
    stu.stutel = tel
    stu.save()
    
    
    方法2:使用create()方法
    Student.objects.create(stuname=stuname, 
                            stusex=sex,
                            stubirth=birth, 
                            stutel=tel)
    
    
    方法3:使用初始化
    在Student模型中重构__init__()方法,添加如下代码
    
    def __init__(self, name, birth=None, sex=None,tel=None):
        super().__init__()
        self.stuname = name
        self.stubirth = birth 
        self.stusex = sex
        self.stutel = tel
    
    # 视图函数中定义创建学习信息的方法为:
    stu = Student('小草', 18, 1, 12331244323)
    stu.save()
    
    

    注意:重构init方法的时候,一定要使用super().init(),否则会报studen对象没有_state的属性。

    4. 查询所有的学生信息

    使用all()方法获取所有的数据

    Student.objects.all()
    
    

    4. 查询所有女学生的姓名和出生日期

    Student.objects.filter(stusex=0)
    或者
    Student.objects.exclude(stusex=1)
    
    

    其中:

    filter():返回符合条件的数据

    exclude():过滤掉符合条件的数据

    5.查询所有的学生,按照id从大到小排序

    Student.objects.all().order_by('-id')
    
    

    其中:

    order_by('id'):表示按照id升序的排列

    order_by('-id'):表示按照id降序的排列

    6. 查询所有的学生信息,并序列化

    Student.objects.all().values()
    Student.objects.all().values('s_name', 's_age')
    
    

    7.查询所有80后学生的姓名、性别和出生日期(筛选)

    Student.objects.filter(stubirth__gte='1980-01-01', 
                            stubirth__lte='1990-01-01')
    
    

    8.查询名字中有王字的学生的姓名(模糊),like '%小%', like '小%',like '%小'

    Student.objects.filter(s_name__contains='小')
    Student.objects.filter(s_name__startswith='小')
    Student.objects.filter(s_name__endswith='小')
    
    

    9.查询id等于1,2的学生信息

    # select * from student where id in (1,2)
    stus = Student.objects.filter(id__in=[1,2])
    
    

    10. 获取id为1的信息,get()和filter()的使用

    Student.objects.filter(id=1)
    Student.objects.get(id=1)
    Student.objects.get(pk=1)
    
    # get获取不到数据会直接报错, filter获取不到数据是返回空
    stus = Student.objects.get(pk=5)
    Student.objects.filter(id=5)
    
    # get只能返回一个数据,返回多个会报错
    Student.objects.get(s_age=15) # 前提条件:数据库中s_age为15的数据有多条
    
    

    11.获取所有学生(按照id降序)中第一个/最后一个学生信息

    # 获取按照id降序的第一个学生信息
    Student.objects.all().order_by('-id')[0]
    Student.objects.all().order_by('-id').first()
    # 获取所有学生(按照id降序)中最后一个学生信息
    Student.objects.all().order_by('-id').last()
    

    12.删除学生信息

    def delete_stu(request):
        # 删除
        # 按id删除
        # get方法慎用,删除也慎用;
        # 删除过一次的id如果再次被get方法查找会报错,因其已经不存在了
        stu=Student.objects.get(id=1)
        stu.delete()
        return HttpResponse('删除完成')
    

    13.更新或者修改学生信息

    def update_stu(request):
        # 更新,第一种方法
        stu=Student.objects.get(id=2)
        stu.s_name='吴彦祖'
        stu.save()
        # 第二种方法
        Student.objects.filter(id=1).update(s_age=18)
        return HttpResponse('更新成功')
    

    相关文章

      网友评论

          本文标题:2018-09-11 Django与mysql

          本文链接:https://www.haomeiwen.com/subject/ykfpgftx.html