• Django模型层(models.py)之模型创建


      Django数据库操作是十分重要的内容,这两天简单学习了数据库的操作,这里做个总结。

      1.ORM简介

      简单的来说,ORM就是对象-关系-映射。它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库。

      2.创建模型前的准备

      在settings中配置databases

      DATABASES = {

      'default': {

      'ENGINE': 'django.db.backends.mysql',

      'NAME':'myorm_test', #需要连接的数据库名称

      'USER':'xxx', #连接数据库的用户名

      'PASSWORD':'xxx', #用户名对应的密码

      'HOST':'127.0.0.1', #连接主机,这里是本机

      'PORT':3306 #端口,默认是3306

      }

      }

      pymysql包的导入

      在setting中导入包pymysql

      在项目名文件下的__init__.py文件中写入:

      import pymysql

      pymysql.install_as_MySQLdb()

      3.创建模型

      在models.py中新建类

      from django.db import models

      # Create your models here.

      # 图书列表

      class Book(models.Model):

      id = models.AutoField(primary_key=True)

      name = models.CharField(max_length=50)

      price = models.DecimalField(max_digits=7,decimal_places=2)

      # max_digits:总位数(不包括小数点和符号),decimal_places:小数位数

      publishs = models.ManyToManyField(to="publish")

      authors = models.ManyToManyField(to="author")

      # 出版社列表

      class Publish(models.Model):

      id = models.AutoField(primary_key=True)

      name = models.CharField(max_length=50)

      addr = models.CharField(max_length=100)

      # 作者列表无锡看妇科的医院 http://www.ytsgfk120.com/

      class Author(models.Model):

      id = models.AutoField(primary_key=True)

      name = models.CharField(max_length=30)

      country = models.CharField(max_length=20)

      4.在terminal中执行数据迁移命令

      python manage.py makemigrations

      python manage.py migrate

      !!!遇到的问题

      执行python manage.py makemigrations命令时,报错:

      File "E:PycharmProjectsMyORM_Testvenvlibsite-packagesdjangodbackendsmysqlase.py", line 36, in

      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.

      解决:

      在"E:PycharmProjectsMyORM_Testvenvlibsite-packagesdjangodbackendsmysqlase.py", line 36位置注释掉下列代码:

      # if version < (1, 3, 13):

      # raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)

      再次执行python manage.py makemigrations继续报错:

      File "E:PycharmProjectsMyORM_Testvenvlibsite-packagesdjangodbackendsmysqloperations.py", line 146, in last_executed_query

      query = query.decode(errors='replace')

      AttributeError: 'str' object has no attribute 'decode'

      解决:

      在"E:PycharmProjectsMyORM_Testvenvlibsite-packagesdjangodbackendsmysqloperations.py", line 146位置修改代码如下:

      query = getattr(cursor, '_executed', None)

      if query is not None:

      # query = query.decode(errors='replace') # 原始代码

      query = query.encode(errors='replace') # 修改后

      return query

      问题解决。

  • 相关阅读:
    js--未来元素
    Nginx 浏览器打开是下载状态
    JS对象的深拷贝
    微信小程序--扫描二维码
    js--call( )/apply()/bind()--应用
    数学书籍
    【活动】你有创意我有奖!摹客X飞书2020产品设计大赛邀你来战
    APP设计实例解析,深色模式为什么突然就火了?
    焦虑求职季又至:2020UI设计师作品集如何准备?
    QQ音乐 vs 网易云音乐,用户体验哪家强?
  • 原文地址:https://www.cnblogs.com/djw12333/p/11429771.html
Copyright © 2020-2023  润新知