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:\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模型层(models.py)之模型创建的更多相关文章
- django之 使用views.py里面的函数对表进行增删改查 内容(models.py中表的创建、views.py中函数的使用,基于对象的跨表查询)
models之对于表的创建有以下几种: 一对一:ForeignKey("Author",unique=True), OneToOneField("Author" ...
- (16)模型层Models - ORM的使用
需求:通过orm创建user表 先配置settings文件夹 连接数据库和配置数据库 Django的模块有两种 1.mysqlDB django内置的模块,只能在python2.X版本下用 2.py ...
- Django模型层ORM学习笔记
一. 铺垫 1. 连接Django自带数据库sqlite3 之前提到过Django自带一个叫做sqlite3的小型数据库,当我们做本地测试时,可以直接在sqlite3上测试.不过该数据库是小型的,在有 ...
- Django多对多表的三种创建方式,MTV与MVC概念
MTV与MVC MTV模型(django): M:模型层(models.py) T:templates V:views MVC模型: M:模型层(models.py) V:视图层(views.py) ...
- Python Django框架笔记(二):创建应用和django 管理
#前提是已经创建项目 (一) 创建应用 使用命令,在项目中创建一个应用(blog自定义) python manage.py startapp blog 创建完成后,可以看到下面几个文件 文件 ...
- Django创建模型_模型层
1.在项目Mysite下创建应用bms 2.在bms下的models.py文件中创建模型 from django.db import models # Create your models here. ...
- Django模型层
ORM简介: MVC或者MTV框架中包括一个重要的部分就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工 ...
- django模型层 关于单表的增删改查
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...
- Django模型层—ORM
目录 一.模型层(models) 1-1. 常用的字段类型 1-2. 字段参数 1-3. 自定义char字段 1-4. 外键关系 二.Django中测试脚本的使用 三.单表操作 3-1. 添加记录 3 ...
- Django 模型层之单表操作
一.单表操作之创建表 在app的models.py文件中创建模型: from django.db import models class Book(models.Model): id = models ...
随机推荐
- Taro-UI 2.0样式在H5上生效,微信小程序不生效?
答案: https://taro-ui.aotu.io/#/docs/questions taro-ui 自定义样式覆盖小程序组件样式使用到了 globalClass 这个微信小程序特性,由于微信小程 ...
- windbg是如何搜索符号文件的?
来个样例 我的符号目录设置是: 用我们在windows下调试必须用到的ntdll.dll模块来讲下windbg加载符号文件的过程.windbg加载符号文件时,会首先根据配置的符号目录信息,在本地符号目 ...
- CF598: div3解题报告
CF598:div3解题报告 A: Payment Without Change 思路: 按题意模拟即可. 代码: #include<bits/stdc++.h> using namesp ...
- Oralce 学习笔记
1. Oracle 数据库文件后缀是什么格式? 数据文件是以oracle自定义的格式存储的,没有固定的后缀名,一般通用的为.dbf和.ora而默认是dbf的 2.Database Configurat ...
- Problem A. 最近公共祖先 ———2019.10.12
我亲爱的学姐冒险跑去为我们送正解 但是,,,, 阿龙粗现了! cao,, 考场期望得分:20 实际得分:20 Problem A. 最近公共祖先 (commonants.c/cpp/pas) 最近 ...
- 洛谷 P2023 [AHOI2009]维护序列 题解
P2023 [AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中 ...
- JS中 (function(){...})()立即执行函数
(function(){...})() (function(){...}()) 这是两种js立即执行函数的常见写法. 基本概念: 函数声明:function fname(){...}; 使用funct ...
- dockerfile 的问题 FROM alpine:3.8 temporary error (try again later)
FROM alpine:3.8 apk add xxx安装软件 fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX ...
- Log4j Threshold指定输出等级&&Append指定是否追加内容
Threshold指定输出等级 有时候我们需要把一些报错ERROR日志单独存到指定文件 ,这时候,Threshold属性就派上用场了: Threshold属性可以指定日志level Log4j根据日志 ...
- MySQL 执行插入报错 - Incorrect string value: '\xE4\xB8\xAD\xE6\x96\x87' for column 'name' at row 1
报错的原因就是在执行插入时对Name这个字段被赋予了错误的字符串值:’\xE4\xB8\xAD\xE6\x96\x87’ 实际上就函数里面的变量接收到的值编码格式跟它定义的不一致. 使用navica ...