Django笔记-数据库


一、设计表结构
(管理员身份启动cmd端   执行<net start mysql57>(启动mysql数据库服务),然后执行<mysql  -u  root  -p>进入数据库,在执行<show databases;>查看数据库,执行<create database sunck;>创建名为sunck的数据库)
    1、班级表结构
        表名  grades
        字段
            a、班级名称    gname
            b、成立时间    gdate
            c、女生总数    ggirlnum
            d、男生总数    gboynum
            e、是否删除    isDelete

    2、学生表结构
        表名  students
        字段
            a、学生姓名    sname
            b、学生性别    sgender
            c、学生年龄    sage
            d、学生简介    scontend
            e、所属班级    sgrade
            f、是否删除    isDelete

二、配置数据库
    注意:Django默认使用SQLite数据库(settings.py文件76-81行)

    在settings.py文件中,通过DATABASES 选项进行数据库配置
    (python3.x之后安装的是PyMySQL数据库包)
    在__init__.py文件中写入 import pymysql
                           pymysql.install_as_MySQLdb()

    在settings.py文件中,将DATABASES = {
                                            'default': {
                                                'ENGINE': 'django.db.backends.sqlite3',
                                                'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
                                            }
                                        }                       
    更改为DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME': "sunck",        #数据库名
                            'USER':'root',            #数据库账号名
                            'PASSWORD':'123456',    #数据库账号密码
                            'HOST':'127.0.0.1',        #数据库服务的IP
                            'PORT':'3306',            #端口
                        }
                    }

三、创建应用
(在一个项目中,可以创建多个应用,每个应用进行一种业务服务)
    
    打开cmd端,进入1_project目录下的project目录(cd  D:\Python_pycharm\Python3.6.0\day34\1_project\project),执行<python  manage.py startapp myApp>,1_project目录下的project的同级目录会生成myApp文件

    myApp目录说明
        __init__.py文件:一个空文件,告诉python这个目录应该被看做一个python包
        admin.py: 站点配置
        models.py: 模型
        views.py: 视图

四、激活应用
    
    在settings.py文件,将myApp应用加入到INSTALLED_APPS(33行左右)选项中
        INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'myApp'
        ]
五、定义模型

    概述:有一个数据表,就对应有一个模型(上面有两张表grades和students)

    在models.py文件中定义模型,在models.py引入包--from django.db import models
    模型类要继承models.Model类

    class Grades(models.Model):                     #对应数据库中的一张表
        gname    = models.CharField(max_length=20)  #字符串类型
        gdate    = models.DateField()               #时间类型
        ggirlnum = models.IntegerField()            #数字类型
        gboynum  = models.IntegerField()
        isDelete = models.BooleanField(default=False)            #布尔值类型
        def __str__(self):
            return "%s-%d-%d"%(self.gname,self.ggirlnum,self.gboynum)    #显示


    class Students(models.Model):
        sname    = models.CharField(max_length=20)
        sgender  = models.BooleanField(default=True)
        sage     = models.IntegerField()
        scontend = models.CharField(max_length=20)
        sgrade   = models.ForeignKey("Grades")      #关联外键(两张表是一对多的关系)
        isDelete   = models.BooleanField(default=False)

    说明:不需要定义主键,在生成时自动添加,并且值为自动添加

六、在数据库中生成数据表
    生成迁移文件

        在刚刚创建myApp的cmd端中执行<python  manage.py   makemigrations>
            Migrations for 'myApp':
              myApp\migrations\0001_initial.py
                - Create model Grades
                - Create model Students
        表示执行成功
        myApp目录下回生成一个migrations文件夹,在migrations目录下生成一个迁移文件,此时还么有生成数据表


    执行迁移文件
        还是在在刚刚创建myApp的cmd端下面执行<python manage.py  migrate>
            Operations to perform:
              Apply all migrations: admin, auth, contenttypes, myApp, sessions
            Running migrations:
              Applying contenttypes.0001_initial... OK
              Applying auth.0001_initial... OK
              Applying admin.0001_initial... OK
              Applying admin.0002_logentry_remove_auto_add... OK
              Applying contenttypes.0002_remove_content_type_name... OK
              Applying auth.0002_alter_permission_name_max_length... OK
              Applying auth.0003_alter_user_email_max_length... OK
              Applying auth.0004_alter_user_username_opts... OK
              Applying auth.0005_alter_user_last_login_null... OK
              Applying auth.0006_require_contenttypes_0002... OK
              Applying auth.0007_alter_validators_add_error_messages... OK
              Applying auth.0008_alter_user_username_max_length... OK
              Applying auth.0009_alter_user_last_name_max_length... OK
              Applying myApp.0001_initial... OK
              Applying sessions.0001_initial... OK
        表示执行成功
        可以看看mysql中的sunck,会生成很多表

七、测试数据操作
    进入python shell

        还是在在刚刚创建myApp的cmd下面执行<python  manage.py  shell>
            Type "help", "copyright", "credits" or "license" for more information.
            (InteractiveConsole)
        表示执行成功

        引入包
            from myApp.models   import  Grades,Students
            from django.utils  import timezone
            from datetime  import *
        在python shell 中执行引入包的命令


    查询所有数据
        在python shell 中执行<Grades.objects.all()>(查看所有数据)
        返回<QuerySet []>(因为还没有数据)

    添加数据
        本质:创建一个模型类的对象实例

        在python shell 中执行<grade = Grades()>,
        执行<grade.gname = "python04">,
        执行<grade.gdate = datetime(year=2018,month=8,day=9)>,
        执行<grade.ggirlnum = 3>,
        执行<grade.gboynum = 15>,
        执行<grade.save()>
        ,这样就在表中存入了第一条数据

        再执行<Grades.objects.all()>
        返回<<QuerySet [<Grades: python04-3-15>]>>表明已经成功存入第一条数据


        再添加一条数据
        >>> grade2 = Grades()
        >>> grade2.gname = "python05"
        >>> grade2.gdate = datetime(year=2018,month=8,day=10)
        >>> grade2.ggirlnum = 5
        >>> grade2.gboynum = 10
        >>> grade2.save()

        执行<Grades.objects.all()>
        返回<QuerySet [<Grades: python04-3-15>, <Grades: python05-5-10>]>


    查看某个对象
        执行<Grades.objects.get(pk=2)>
        返回<Grades: python05-5-10>

        >>> g = Grades.objects.get(pk=2)(和上面的方法一样)
        >>> g
        <Grades: python05-5-10>

    修改
        格式:模型对象.属性 = 新值
        >>> grade2.gboynum = 23
        >>> grade2.save()

    删除
        格式:模型对象.delete()
        >>> grade2.delete()        (物理删除,删除之后,数据库中就没有了)


    关联对象
        在Students表中添加两条数据
        >>> grade1 = Grades.objects.get(pk=1)
        >>> stu = Students()
        >>> stu.sname = "tom"
        >>> stu.sgender = False
        >>> stu.sage = 20
        >>> stu.scontend = "学生"
        >>> stu.sgrade = grade1
        >>> stu.save()
        >>> stu1 = Students()
        >>> stu1.sname = "pic"
        >>> stu1.sage = 50
        >>> stu1.scontend = "明星"
        >>> stu1.sgender = True
        >>> stu1.sgrade = grade1
        >>> stu1.save()

        
        获得关联对象的集合
            需求:获取python04班所有的学生
            格式:对象名.关联的类名(小写)_set.all()
            >>> grade1.students_set.all()
            返回<QuerySet [<Students: Students object (1)>, <Students: Students object (2)>]>


            需求:创建xusong,属于python04班
            >>> stu3 = grade1.students_set.create(sname=u'xusong',sgender=True,scontend=u' 明星',sage=45)(不用save,可以直接添加到数据库中)


八、启动服务器
    
    格式: python  manage.py  runserver  ip:port
    注意:IP可以不写,不写代表本机ip。端口号默认是8000
    实例:python  manage.py  runserver
    说明:这是一个纯python写的一个轻量级web服务器,仅仅在开发测试中使用
        
        D:\>cd D:\Python_pycharm\Python3.6.0\day34\1_project\project

        D:\Python_pycharm\Python3.6.0\day34\1_project\project>python  manage.py runserver
        Performing system checks...

        System check identified no issues (0 silenced).
        August 10, 2018 - 13:03:35
        Django version 2.0.6, using settings 'project.settings'
        Starting development server at http://127.0.0.1:8000/
        Quit the server with CTRL-BREAK.
        表示启动成功(要先启动mysql服务)


        使用http://127.0.0.1:8000/登录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值