Django model层 mysql_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中新建类
# 图书列表
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.ForeignKey(to="publish",on_delete=models.CASCADE,null=True)
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=20)
country = models.CharField(max_length=20,null=True)
authordetail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE,null=True)
class AuthorDetail(models.Model):
id = models.AutoField(primary_key=True)
# country = models.CharField(max_length=20)
addr = models.CharField(max_length=100)
email = models.EmailField()
注意:
表间关系为多对多时,调用ManyToManyField()方法自动创建第三张表,第三张表中含有三个字段:第三张表的主键,关联第一张表的外键,关联第二张表的外键
表间关系为一对多时,调用ForeignKey()方法在多的那方创建关联一的那方的外键
表间关系为一对一时,调用OneToOneField()为两张表建立一对一关系
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
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
问题解决。
Django model层 mysql_Django模型层(models.py)之模型创建相关推荐
- Django 2.1.3 视图层 内置CBV通用视图
内置的基于类的通用视图 1. 扩展通用视图 2. 对象的通用视图 3. 制作"友好"的模板上下文 4. 添加额外的上下文 5. 查看对象的子集 6. 动态过滤 7. 执行额外的工作 ...
- 在Django将已有数据库生成models文件
Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以 ...
- mysql 增删修模型_48.Python中ORM模型实现mysql数据库基本的增删改查操作
首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...
- Django 模型层(models) 复杂查询详解
Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...
- Django之路——6 Django的模型层(一)
ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- python代码函数字符查询宝典书籍_Django基础五之django模型层(一)单表操作
二 单表操作 一.创建表 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db importmodels#Create your models ...
- 【Django】模型层说明
[Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...
- Django之模型层和ORM
在之前的文章中已经介绍过数据库的操作使用,但是不够系统,今天就模型层和ORM做一个系统的介绍.所谓模型层就是主要负责和数据库之间进行数据交互的一个模块 Django连接mysql数据库,安装mysql ...
- Web开发-Django模型层
Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...
最新文章
- 开发者和程序员需要关注的42个播客
- 分享一下cookies操作(增、删、改、查)小经验
- flex使用FlexPrintJob打印问题
- 今天,开源中国出了一条广告史上最“正直”的广告
- 五十六、Java的json解析库Json-lib和Gson
- 在什么情况下,刘强东会丧失京东的控制权?
- 就业形势如此的严峻,你为何不努力?
- python是动态语言
- 厉害了 | 一秒切换Hexo中英文,厉害了!!
- linux命令执行的通过程,Linux下shell命令执行过程简介
- qstandarditem判断是否单击在checkbox内_Tiktok运营,如何判断有人查看了您的TikTok个人资料...
- nginx url 重写_Nginx重写URL规则示例
- SpringCloud实战(一)基于nacos实现订单+视频服务的调用
- mysql一对多前端实现_django一对多模型以及如何在前端实现详解
- redis 获取类似key的所i有的值_高可用 Redis 分布式锁实施方案!
- 微信分享出错问题,MicroMsg.SDK.WXMediaMessage: checkArgs fail, thumbData is invalid
- Camera和Image sensor技术基础笔记(3) -- 色彩空间,CFA,bayer数据处理
- oracle 获得节假日,Oracle 计算两个日期间时间排除非工作日及非工作时间
- iOS 强制旋转屏幕
- 计算机科学技术对教育的影响,计算机科学技术在计算机教育中的应用分析(原稿)...