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)之模型创建相关推荐

  1. Django 2.1.3 视图层 内置CBV通用视图

    内置的基于类的通用视图 1. 扩展通用视图 2. 对象的通用视图 3. 制作"友好"的模板上下文 4. 添加额外的上下文 5. 查看对象的子集 6. 动态过滤 7. 执行额外的工作 ...

  2. 在Django将已有数据库生成models文件

    Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致  运行下面代码可以 ...

  3. mysql 增删修模型_48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  4. Django 模型层(models) 复杂查询详解

    Django 模型层(models) 复杂查询详解 一般Django orm 和原生sql混合使用 1.测试文件 只单独测试django中的某一个py文件 不一定是tests.py 1.配置 在任意一 ...

  5. Django之路——6 Django的模型层(一)

    ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  6. python代码函数字符查询宝典书籍_Django基础五之django模型层(一)单表操作

    二 单表操作 一.创建表 创建模型 创建名为book的app,在book下的models.py中创建模型: from django.db importmodels#Create your models ...

  7. 【Django】模型层说明

    [Django模型层] 之前大概介绍Django的文章居然写了两篇..这篇是重点关注了Django的模型层来进行学习. ■ 模型定义 众所周知,Django中的模型定义就是定义一个类,其基本结构是这样 ...

  8. Django之模型层和ORM

    在之前的文章中已经介绍过数据库的操作使用,但是不够系统,今天就模型层和ORM做一个系统的介绍.所谓模型层就是主要负责和数据库之间进行数据交互的一个模块 Django连接mysql数据库,安装mysql ...

  9. Web开发-Django模型层

    Django模型层 简述 Django框架处理业务的逻辑一般如下(省略图,源于网络,侵删) 可以看到,Django自带了一套ORM机制,这也是Django框架的核心-"全面",将一 ...

最新文章

  1. 开发者和程序员需要关注的42个播客
  2. 分享一下cookies操作(增、删、改、查)小经验
  3. flex使用FlexPrintJob打印问题
  4. 今天,开源中国出了一条广告史上最“正直”的广告
  5. 五十六、Java的json解析库Json-lib和Gson
  6. 在什么情况下,刘强东会丧失京东的控制权?
  7. 就业形势如此的严峻,你为何不努力?
  8. python是动态语言
  9. 厉害了 | 一秒切换Hexo中英文,厉害了!!
  10. linux命令执行的通过程,Linux下shell命令执行过程简介
  11. qstandarditem判断是否单击在checkbox内_Tiktok运营,如何判断有人查看了您的TikTok个人资料...
  12. nginx url 重写_Nginx重写URL规则示例
  13. SpringCloud实战(一)基于nacos实现订单+视频服务的调用
  14. mysql一对多前端实现_django一对多模型以及如何在前端实现详解
  15. redis 获取类似key的所i有的值_高可用 Redis 分布式锁实施方案!
  16. 微信分享出错问题,MicroMsg.SDK.WXMediaMessage: checkArgs fail, thumbData is invalid
  17. Camera和Image sensor技术基础笔记(3) -- 色彩空间,CFA,bayer数据处理
  18. oracle 获得节假日,Oracle 计算两个日期间时间排除非工作日及非工作时间
  19. iOS 强制旋转屏幕
  20. 计算机科学技术对教育的影响,计算机科学技术在计算机教育中的应用分析(原稿)...

热门文章

  1. Matplotlib绘制简单函数的梯度下降法
  2. c++语言关键字大全,C++语言const 关键字使用方法图文详解
  3. ibm750服务器维护,IBM 750服务器.PDF
  4. bash 脚本_Bash技巧:可以左右下移动和旋转俄罗斯方块的Shell脚本
  5. 开源医学图像数据集(资源整合)
  6. 华为云数据库自研黑科技,助推企业成本再降 50%
  7. ibtmp1文件过大
  8. 把巧克力球送上天,玛氏用Uni Marketing 打造网红零食
  9. DDD峰会归来话DDD
  10. getBytes等空指针异常