zoukankan      html  css  js  c++  java
  • Python学习第128天(环境配置、orm增删改)

    今天白天用了大概四个小时,逐个解决了我在Django开发中遇到的各种傻逼问题,今天分为两个部分,首先是说一下解决问题的过程,记录下来方便下次使用,每个项目都需要单独进行修改,同时把今天的练手作业分析一下。

    一、环境变量问题的解决:

      (一)数据库的时区设置,我找到问题原因的时候也是惊呆了,报错内容为:Server returns invalid timezone. Go to Advanced tab and setserverTimezone

      出现的位置,在我们需要添加database表格方便查看时出现

      

       解决方法,在dos命令环境内进行如下操作:

        1、输入:set global time_zone = '+8:00'; 

        2、继续输入 show variables like'%time_zone'; 

      显示如下图形:

        

      (二)pymysql版本过低问题报错,虽然确实版本低,但是真的是没法更新,所以还是将修改方法记录一下;

        首先报错发生在你完成models文件class创建后,输入python manage.py makemigrations的时候

        报错内容为:    

      File "C:Users	ry_for_ormvenvlibsite-packagesdjangodbackendsmysqlase.py", line 36, in <module>
        raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
    django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

        此时我们需要找到文件C:Users ry_for_ormvenvlibsite-packagesdjangodbackendsmysqlase.py

        对其36行内容进行修改:

        

         方法就是将这部分内容注释掉,就不会再监测你的版本问题了

        这是解决问题的第一步,但是随后又会发生如下报错:

      File "C:Users	ry_for_ormvenvlibsite-packagesdjangodbackendsmysqloperations.py", line 146, in last_executed_query
        query = query.decode(errors='replace')
    AttributeError: 'str' object has no attribute 'decode'

        大致意思就是此处的 str 没有 decode 的属性,点击进入 所以我们找到operations.py 文件,把 decode 改为 encode 即可

        

       然后就可以顺利的建立:

        

     顺着了这个问题的解决,总结一下最终实现导入pymysql的方法

      最终我们实现了models中的类与mysql数据库连接,这样,我们就可以顺利建立了,大致过程如下:

      1.app包下的models.py文件内class 名称(models.Model):完成基本内容的创建

      2.Django项目下的__init__.py文件输入:

        import pymysql

        pymysql.install_as_MySQLdb()

        这里导入pymysql的方法就是pip  install  pymysq即可搞定,版本问题参考问题(一)的解决

      3.输入python manage.py  makemigrations

      4.输入python manage.py migrate

      5.输入python manage.py runserver 127.0.0.1:8080

    这里我的DATABASES内容如下:  

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'first_for_me',    #你的数据库名称
            'USER': 'root',   #你的数据库用户名
            'PASSWORD': '123456', #你的数据库密码
            'HOST': '', #你的数据库主机,留空默认为localhost
            'PORT': '3306', #你的数据库端口
        }
    }

        完成上述五步之后,dos中mysql效果如下:

        

       (三)Django中的mysql表格插件导入的说明,就是下面这个东西:

      

       需要对填写内容说明一下,不然总是填写错误

      

    二、Django中ORM的增删改问题(单表操作)

    Django项目url文件:  

    from django.contrib import admin
    from django.urls import path
    from app_1 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('index/',views.index),
        path('addbook/',views.addbook),
        path('update/',views.update),
        path('delete/',views.delete)
    ]

    app下的views文件:  

    from django.shortcuts import render,HttpResponse
    from app_1.models import *
    
    def index(req):
        return render(req,'index.html')
    
    def addbook(req):
    
        #增加内容方式1:
        # b = Book(name='python基础', price=99,author='xiaoyao',pub_date='2017-12-12')
        # b.save()
    
        #增加方式2:
        Book.objects.create(name='红楼梦linux', price=88,author='曹雪芹',pub_date='1766-12-12')
        return HttpResponse('ok')
        #类别到可以使用通过GET获得的字典直接添加,客户在后台输入信息后直接添加
        #Book.objects.create(**div)
    
    def update(req):# 无论是修改还是删除,都是建立在查找的基础上进行的
        #修改方式1:
        Book.objects.filter(author='xiaoyao',).update(price=999)
        #这里需要注意Book.objects.filter(author='xiaoyao',)最后面的这个逗号,没有后面就会报错
    
        #修改方式2:
        b = Book.objects.get(author='xiaoyao')
        #这个b的数据类型是django.db.models.quer.QuerySet
        # 是一个Django特定的数据类型,筛选出来是一组数据集合,可以进行切片,有点类似列表
        b.price = 120
        b.save()
        return HttpResponse('更新成功!')
    
    def delete(req):
        #删除方法:
        Book.objects.filter(author='yy').delete()
    
        return HttpResponse('删除成功!')

    app下的models文件:

    from django.db import models
    
    class Book(models.Model):
        name = models.CharField(max_length=20)
        price = models.IntegerField()
        pub_date = models.DateField()
        author = models.CharField(max_length=32)
    
    class Author(models.Model):
        name = models.CharField(max_length=32)

    templates包下的index.html文件:

    !DOCTYPE html>
    <html lang="en">
    <head>
        <script src="jquery-3.1.1.js"></script>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                margin: 0;
                padding: 0
            }
            .head{
                line-height: 40px;
                background-color: green;
                color: white;
                text-align: center;
            }
        </style>
    </head>
    <body>
    <div class="outer">
        <div class="head">标题</div>
        <div class="content">
            <a href="/addbook/">添加书籍</a>
            <a href="/update/">修改书籍</a>
            <a href="/delete/">删除书籍</a>
            <a href="/select/">查询书籍</a>
        </div>
        <hr>
        <div class="queryResult">
             {% for book in book_list %}
             <div>
                  <p>{{ book.name }} {{ book.author }} {{ book.price }}</p>
             </div>
             {% endfor %}
        </div>
    </div>
    </body>
    </html>

    最终实现的效果就是,我们在前端通过Django项目,完成了对后台数据库的操作

      效果1:    

      效果2,实际上就是通过dos命令打开数据库,对其内容进行查找显示:

     算是实现了连接效果

    最后说一下一个备用问题,我们在使用ORM对数据库mysql进行操作的时候,还是应该看一下ORM是如何翻译我们的语句成为mysql所能识别的内容,可以在Django项目下的settings文件下增加:

    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语言时,对应的每个mysql语句,显示在后台命令台。

    今天的任务总的来说是顺利完成了

  • 相关阅读:
    《构建之法》阅读笔记4
    《构建之法》阅读笔记3
    《构建之法》阅读笔记2
    《构建之法》阅读笔记1
    Android可折叠式菜单栏
    Material卡片式布局+下拉刷新+完整代码
    android悬浮按钮的使用
    androidStdio下载与安装以及安装过程问题解释
    html给图片划分区域添加链接
    UI进阶2-滑动菜单
  • 原文地址:https://www.cnblogs.com/xiaoyaotx/p/13286060.html
Copyright © 2011-2022 走看看