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

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

1.ORM简介

详细介绍可以参考这篇博客:

https://www.cnblogs.com/wgbs25673578/p/5140482.html

简单的来说,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)
# 作者列表
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:\PycharmProjects\MyORM_Test\venv\lib\site-packages\django\db\backends\mysql\base.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.

解决:
"E:\PycharmProjects\MyORM_Test\venv\lib\site-packages\django\db\backends\mysql\base.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:\PycharmProjects\MyORM_Test\venv\lib\site-packages\django\db\backends\mysql\operations.py", line 146, in last_executed_query
    query = query.decode(errors='replace')
AttributeError: 'str' object has no attribute 'decode'

解决:
"E:\PycharmProjects\MyORM_Test\venv\lib\site-packages\django\db\backends\mysql\operations.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

问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值