以一个栗子尝试来记录:

两个表存储在数据库中,BookInfo表示书,HeroInfo表示人物。一本书中有多个人物

在MySQL中新建一个数据库Django1,不用创建表,用Django模型来配置数据库

1、数据库ER图

2、数据库配置

在settings.py中进行数据库的配置。

留意:django默认连接的是sqlite3数据库。我们需要修改成MySQL

django1/settings.py

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django1',
'USER': 'root',
'PASSWORD': '123',
'HOST': 'localhost',
'PORT': '3306'
}
}

PS:

在Python3中用MySQLdb连接MySQL会猜到一个坑:MySQLdb 只适用于python2.x,发现pip装不上。它在py3的替代品是:import pymysql

而Django默认的还是使用MySQLdb:执行会报:ImportError: No module named 'MySQLdb'

以下为安装MySQLdb的解决方法:

方法一:安装mysqlclient 1.3.10版本

pip install mysqlclient==1.3.10

方法二:

在站点的 __init__.py 文件中添加

import pymysql
pymysql.install_as_MySQLdb()

3、创建应用

在一个工程里面可以创建多个应用(app)。每个应用对应一种业务

# 创建应用的命令
python manage.py startapp booktest

执行后,多了一个booktest目录。该目录就是这个应用所在的目录。

4、定义模型类

通过定义模型类去生成数据库。而不是直接写数据库的表

模型类需要继承django.db.models.Model类

注意:在模型类中,不需要定义PK(主键)的

当输出对象的时候,系统会调用__str__()方法(描述对象本身)

booktest/models.py

from django.db import models

# Create your models here.

class BookInfo(models.Model):
# 设置字段
btitle = models.CharField(max_length = 20)
bpub_date = models.DateTimeField() def __str__(self):
return self.btitle class HeroInfo(models.Model):
# 设置字段
hname = models.CharField(max_length = 10)
hgender = models.BooleanField()
hcontent = models.CharField(max_length = 1000)
hbook = models.ForeignKey(BookInfo, on_delete = models.CASCADE) def __str__(self):
return self.hname

5、启动服务器

在命令行输入

# 表示启动django服务器,默认使用8000端口
python manage.py runserver # 使用8080作为端口
python manage.py runserver 8080

然后通过浏览器端访问 http://127.0.0.1:8080/

看到django已经成功启动后,此时数据库django1中多了一个表django_miggrations

6、生成数据库的表

首先需要激活模型,编辑settings.py文件,在INSTALLED_APPS加上应用的名称(booktest)

django1/settings.py

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'booktest'
)

然后生成迁移文件,在命令行输入

# 然后生成迁移文件,在命令行输入
python manage.py makemigrations # 此时在booktest目录下生成子目录migrations,里面有0001_initial.py
# 0001_initial.py里面系统会主动帮我们的表生成id字段 # 执行迁移,执行SQL语句生成数据库
python manage.py migrate

随后刷新数据库就能在一堆表里看到 booktest_bookinfo和booktest_heroinfo 两个表啦

7、测试数据操作

# 进入django的shell
python manage.py shell # 进行简单的测试(带有django项目的一些配置)导入相关的包
from booktest.models import BookInfo, HeroInfo
from django.utils import timezone
from datetime import * # 查询所有书的信息
BookInfo.objects.all() # 新建一本书的信息
b = BookInfo()
b.btitle = '射鸟英雄传'
b.bpub_date = datetime(year = 2018, month = 8, day = 11)
b.save() # 查询某本书的信息
b1 = BookInfo.objects.get(pk = 1)
b1.id
b1.btitle
b1.bpub_date # 删除书
b1.delete() # 获取关联集合:(与书有关的所有人物)
b.heroinfo_set.all() # 创建关联的数据,不用save()都Ok
b.heroinfo_set.create(hname='欧阳疯', hgender=False, hcontent = '蛤蟆功')

Django:模型model和数据库mysql(一)的更多相关文章

  1. Django:模型model和数据库mysql(二)

    上一篇把简单的模型与数据库的搭建写了一遍,但模型中有很多深入好用的写法补充一下. 同样的栗子,建立新的模型与数据库来写一写 1.依然是搭建环境 >>>django-admin sta ...

  2. Scrapy中使用Django的Model访问数据库

    Scrapy中使用Django的Model进行数据库访问 当已存在Django项目的时候,直接引入Django的Model来使用比较简单 # 使用以下语句添加Django项目的目录到path impo ...

  3. Django进阶Model篇001 - mysql 数据库的配置

    django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...

  4. Django进阶Model篇—数据库操作(ORM)

    一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...

  5. django使用model创建数据库表使用的字段

    Django通过model层不可以创建数据库,但可以创建数据库表,以下是创建表的字段以及表字段的参数.一.字段1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一 ...

  6. Django模型Model的定义

    概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...

  7. django -- 为model 指定数据库名

    一.为model指定数据库名: django自己实现的ORM中.如果要指定一个model的表名是通过Meta类来实现的. from django.db import models # Create y ...

  8. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

  9. Django框架model实现数据库增删查改

    1.创建Django工程 https://www.cnblogs.com/CK85/p/10159159.html 2.在model.py中配置生成表格的类对象. from django.db imp ...

随机推荐

  1. DNS-320 B2 语言包

    神一样的NAS啊,这个语言包在这里http://tsd.dlink.com.tw/downloads2008detailgo.asp,选择sc的就可以了. 真是神一样的配置~ 佩服死d-link了

  2. 2D空间中求两圆的交点

    出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-colli ...

  3. 菜鸟教程之工具使用(八)——EGit禁止自动转换回车换行符

    众所周知,Windows和Linux系统的回车换行是不一样的.想要进一步了解它们的可以阅读下面的介绍,不感兴趣的可以直接跳过. 产生背景 关于“回车”(carriage return)和“换行”(li ...

  4. ES6,Array.from()函数的用法

    ES6为Array增加了from函数用来将其他对象转换成数组. 当然,其他对象也是有要求,也不是所有的,可以将两种对象转换成数组. 1.部署了Iterator接口的对象,比如:Set,Map,Arra ...

  5. docker启动centos7后sudo不能使用

    docker启动centos7后sudo不能使用 过程 使用docker -it xxx /bin/sh进入centos镜像,然后安装了docker,想使用systemctl start docker ...

  6. 编写自定义Yeoman生成器简述

    1. 安装生成器Yeoman提供了generator-generator方便快速编写自己的生成器. 安装: npm install -g generator-generator运行: yo gener ...

  7. debian/deepin 15.3 15.4安装jdk 1.7 (或jdk 7),配置默认环境

    一.前言 Deepin 15.3是基于Debian开发的,安装jdk 1.7有所不同,默认是openjdk-8-jdk,而我们玩一些编译需要的是jdk 7. 所以本文给出安装JDK 7的教程. Dee ...

  8. hdoj:2045

    #include <iostream> using namespace std; ]; int main() { int n; a[] = ; a[] = ; a[] = ; ; i &l ...

  9. github管理开发代码流程

    首先.通过github网站新建一个仓库,得到仓库地址 https://github.com/piercalex/a.git 接着回到客户端,打开git shell: //在客户端配置账户信息 git ...

  10. Java如何找到一个单词的每一次匹配?

    在Java编程中,如何查找字符串中特定单词的最后一个索引? 以下示例演示如何使用Matlass类的matchet.find()方法和Pattern类的Patter.compile()方法查找字符串中指 ...