配置数据库

  • 在Django项目的settings.py文件中,配置数据库连接信息:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "你的数据库名称", # 需要自己手动创建数据库
"USER": "数据库用户名",
"PASSWORD": "数据库密码",
"HOST": "数据库IP",
"PORT": 3306
}
}
  • 在与Django项目同名的目录下的__init__.py文件中写如下代码,告诉Django使用pymysql模块连接MySQL数据库:
import pymysql
pymysql.install_as_MySQLdb()
  • 注:数据库迁移的时候出现一个警告
WARNINGS:
?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion,
by escalating warnings into errors. It is strongly recommended you activate it.
  • 在配置中多加一个OPTIONS参数:Django官网解释
#解决办法一
OPTIONS: {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"}, #解决办法二
#去设置 mysql文件的的my.ini
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" #在输入命令重启mysql(windos系统)
net stop mysql
net start mysql

数据库迁移命令

#数据库迁移 命令(建议一起执行)
python manage.py makemigrations
python manage.py migrate
#每次对models.py文件操作,都尽量执行迁移命令

创建表结构

  • 例子 出版社表 图书表

  • 出版社表

from django.db import models

class Publisher(models.Model):
pid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True)
"""
出版社 表设计 表名 Publisher
pid为出版社的id,设置为主键,默认为int类型 primary_key=True 字段名为pid
name为出版社的名字,限制字符长度32,设置唯一属性unique=True 字段名为name
还可以添加,电话,办公地址等字段,我这里就不添加了
""" class Book(models.Model):
title = models.CharField(max_length=32)
pub = models.ForeignKey("Publisher",on_delete=models.CASCADE)
"""
图书 表设计 表名 Book
title为书名 限制字符长度32
put为外键 models.ForeignKey ("Publisher")关联Publisher表 on_delete=models.CASCADE设置级联关系
"""
  • 表结构

  • 级联删除 (设置级联的为弱势方,关联方删除,自己也会删除,自己删除,却不影响对方)

    删除南方出版社,对应的 大胖小胖减肥日记图书也被删除了

  • 级联删除,删图书 删除心里学1500问 看看对出版社表有影响吗?

  • 学生 班级 表结构

class Class(models.Model):
cid = models.AutoField(primary_key=True)
cname = models.CharField(max_length=32, unique=True)
"""
cid 主键
cname 约束32位的字符,unique=True 约束唯一
""" class Student(models.Model):
sid = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=32,null=False)
gender = models.CharField(max_length=2,default='男')
class_id = models.ForeignKey("Class",on_delete=models.CASCADE)
"""
sid 主键
s_name 字符 32位 非空约束
gendef 字符 2位 默认设置为男
class 外键 关联Class表 , 级联设置
"""

多表关连的设置

  • 还以出版社 图书 为例加上作者
#要实现作者表关联出版社和书记表,创建第四章表,来建立练习

#第一种 django帮我们生成第三张表
class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField('Book') # 不在Author表中生产字段,自动生成第三张表
"""
name 作者名字 32为字符
books Book和Author多对多的关系。books是Author跟Book关联的所有对象。books的作用是在
Author和Book中创建一个中间的关系对象,放在第三张表中,再根据这个中间的关系来获取Book中关联的对象
"""

  • 查看数据库

自创建关联表方法

class AuthorBook(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
date = models.DateField()
"""
author 关联 Author作者表 外键 级联设置
book 关联 Book图书表 外键 级联设置
date 日期属性
可以添加更多字段,就操作比麻烦
"""
#调用方法
author_obj = models.Author.objects.create(name=author_name) # 只插入book表中的内容
author_obj.books.set(books) # 设置作者和书籍多对多的关系

自建表 和 ManyToManyField 联合使用

class Author(models.Model):
name = models.CharField(max_length=32)
books = models.ManyToManyField('Book',through='AuthorBook') # through='AuthorBook' 不在Author表中生产字段,
也不生产第三张表 class AuthorBook(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)#外键关联 Author表 级联设置
book = models.ForeignKey(Book, on_delete=models.CASCADE)#外键关联 Book表 级联设置
date = models.DateField()#可以设置更多字段
作 者:郭楷丰
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!
自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。

django 数据库建表流程,与表结构的更多相关文章

  1. Django 数据库读写分离 分库分表

    多个数据库 配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BA ...

  2. Django 数据库查询集合(双下划线连表操作)

    Django是一款优秀的web框架,有着自己的ORM数据库模型.在项目中一直使用django数据库,写一篇文章专门记录一下数据库操作.略写django工程创建过程,详写查询过程.可以和sqlalche ...

  3. Django创建mysql数据表流程

    在Django项目建好后,在setting.py中设置好mysql连接参数: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysq ...

  4. 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作

    1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...

  5. hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理

    两篇讲的不错文章 http://www.cnblogs.com/nexiyi/p/hbase_shell.html http://blog.csdn.net/u010967382/article/de ...

  6. Django数据库的查看、删除,创建多张表并建立表之间关系

    配置以下两处,可以方便我们直接右键运行tests.py一个文件,实现对数据库操作语句的调试: settings里面的设置: #可以将Django对数据库的操作语法,能输出对应的的sql语句 LOGGI ...

  7. 大数据学习day26----hive01----1hive的简介 2 hive的安装(hive的两种连接方式,后台启动,标准输出,错误输出)3. 数据库的基本操作 4. 建表(内部表和外部表的创建以及应用场景,数据导入,学生、分数sql练习)5.分区表 6加载数据的方式

    1. hive的简介(具体见文档) Hive是分析处理结构化数据的工具   本质:将hive sql转化成MapReduce程序或者spark程序 Hive处理的数据一般存储在HDFS上,其分析数据底 ...

  8. PowerDesigner连接Oracle数据库建表序列号实现自动增长

    原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...

  9. Java项目专栏之数据库建表

    Java项目专栏之数据库建表 数据库建表前期准备 1. 安装mysql:数据库语言,语法和sql server差不太多,如果习惯于sql server可以不用mysql. 2. 安装navicat:可 ...

随机推荐

  1. SpringBoot学习笔记(1):配置Mybatis

    SpringBoot学习笔记(1):配置Mybatis 反思:如果自己写的笔记自己都看不懂,那就不要拿出来丢人现眼! IDEA插件 Free MyBatis Plugin插件可以让我们的MyBatis ...

  2. okhttp 请求list数据实例

    public class DataBean { /** * id : 61684 * movieName : <猜火车2>先导预告片 * coverImg : http://img31.m ...

  3. 关于SQL语句参数中为多个带‘,’的字符串

    案例分析:画面为多分数选项,根据画面选择的分数组合=@分数,以SELECT * FROM [table_name] WHERE sore IN (@分数) 其实这不算一个复杂的问题,可能由于着急下班, ...

  4. Tomcat实现多主多备

    Nginx Upstream 实现简单双机主从热备 下面配置多主多从: upstream testproxy { server 127.0.0.1:8080; server 127.0.0.1:808 ...

  5. BZOJ 3251 树上三角形:LCA【构成三角形的结论】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3251 题意: 给你一棵树,n个节点,每个点的权值为w[i]. 接下来有m个形如(p,a,b ...

  6. 「洛谷 P1801」黑匣子

    好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...

  7. bytearray类型

    bytearray类型是python中的二进制数组类型,返回一个字节数组. byte=bytearray(str,encoding,error) str:待转化的字符串,若该值为字符串,则encodi ...

  8. 时尚与深度学习系列:Fashion forward: Forecasting visual style in fashion

           https://arxiv.org/pdf/1705.06394.pdf         将深度学习与时尚预测联系在一起,是一个很有趣但是估计结果会没什么成效的话题.因为,时尚预测这一领 ...

  9. linux 进程学习笔记-进程调度

    在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...

  10. MySQL业务-发放的优惠券 用户使用情况_20161028

    运营部门给用户发放优惠券,如果想监控优惠券的使用效果 优惠券使用率是个反映效果的很好指标 下面sql就是针对某天对特定用户发放的优惠券在发放日期以后每天的使用情况 SELECT e.城市,e.用户ID ...