多表操作(一对多)

遇到的问题:

执行python manage.py makemigrations后报如下错误

  TypeError: __init__() missing 1 required positional argument: 'on_delete'

这是外键导致的, 修改外键连接代码如标红部分。

class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish",on_delete=models.CASCADE)

执行python manage.py migrate生成数据库表,在此之前看清用的数据库是哪一个,默认是sqlite3,不过约束性不强,我们习惯用mysql。

删掉目录下面的db.sqlite3。到settings.py里面注释掉原本的

# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }

然后添加自己的数据库信息

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'ORM_multi',#你的数据库名称
'USER': 'root',#你的数据库用户名
'PASSWORD': '******',#你的数据库密码
'HOST': '',#你的数据库主机,留空默认为localhost
'PORT': '3306',#你的数据库端口
}
}

用的mysql8.0.12,安装方法参考

https://m.jb51.net/show/146051

打开数据库:

在运行窗口输入cmd,在命令窗口输入mysql -u root -p 密码进入数据库

show databases;  查看数据库

create database ORM_multi;  新建一个ORM_Multi的数据库供程序使用。

接着在Django项目下的ORM_multi目录下的__init__.py文件里面写

import pymysql
pymysql.install_as_MySQLdb()

在models.py里面添加表格。

from django.db import models

# Create your models here.

class Book(models.Model):
name=models.CharField(max_length=20)
price=models.IntegerField()
pub_date=models.DateField()
publish=models.ForeignKey("Publish",on_delete=models.CASCADE) def __str__(self):
return self.name class Publish(models.Model):
name=models.CharField(max_length=32)
city=models.CharField(max_length=32)

打开pycharm下面的terminal命令行窗口运行python manage.py makemigrations和python manage.py migrate建立表格Book和Publish。

这个时候我们可以去数据库里面Check一下表格有没有创建成功。

mysql> use orm_multi;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_orm_multi |
+----------------------------+
| app01_book |
| app01_publish |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
12 rows in set (0.00 sec)

app01_book和app01_publish就是我们创建的表。

然后在pycharm里面看我们的数据库。点击右侧Database,点击“+”号,会弹出一个窗口

填写相应的信息,选apply,ok。数据库就添加进来了。打开数据库中的app01_book表,插入一行数据,会发现不让插入,那是因为此时出版社publish表示空的,但是它是book的外键,外键不能为空,所以插入不了。

所以优先添加出版社的信息,打开app01_publish表,添加

添加和上传如图中红圈部分。此时在去book表中添加信息就不会报错了,注意:外键的id只能对应publish里面的id,即1,2,3,4,写其他的也会出错。

第一篇-Django建立数据库各表之间的联系(上)的更多相关文章

  1. 第二篇-Django建立数据库各表之间的联系(中)

    上篇中已经建立了两个table,Book和Publish.这篇介绍如何用python增删改查数据库中的数据. 在views.py中创建一个index函数 from django.shortcuts i ...

  2. 第三篇-Django建立数据库各表之间的联系(下)

    中篇介绍的是添加,下篇主要介绍查询 通过一个Book表的书的信息查询Publish表中出版社的信息 def addbook(request): # Book.objects.create(name=& ...

  3. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  4. Kettle 实现mysql数据库不同表之间数据同步——实验过程

    下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...

  5. 第一篇:Django基础

    Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...

  6. MySQL 第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  7. python、第一篇:初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  8. sql server DDL语句 建立数据库 定义表 修改字段等

    一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...

  9. day1_安装及建立数据库和表

    #第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...

随机推荐

  1. Python:matplotlib绘制散点图

    与线型图类似的是,散点图也是一个个点集构成的.但不同之处在于,散点图的各点之间不会按照前后关系以线条连接起来. 用plt.plot画散点图     奇怪,代码和前面的例子差不多,为什么这里显示的却是散 ...

  2. solr配置ik中文分词(二)

    上一篇文章主要介绍了solr的安装与配置,这篇文章主要记录如何使用ik分词器对中文进行分词. 步骤: 1.下载ik分词jar包:ik-analyzer-solr5-5.x.jar. 2.将下载的jar ...

  3. 另一个ado工具类

    using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient;using Sy ...

  4. Maven问题:Failure to transfer org.apache.maven

    Maven报错:Failure to transfer org.apache.maven 在创建Maven项目时,经常会在pom.xml的第一行处报错,提示信息如下: Failure to trans ...

  5. Xamarin + MvvmCross 安装 Part 1

    前言 最近,由于工作需要,公司准备开发移动端APP.临近年底,公司不准备大面招人,由于公司一直基于.net平台进行开发,本人自告奋勇,准备先用xamarin做下移动开发.开始了在网上不停的google ...

  6. 找工作的程序员必懂的Linux

    一.为什么要学习Linux 首先,我想先说一下:“为什么要学习Linux”?Linux 是什么,它是一款操作系统,是一个支持多用户.多任务.支持多线程和多CPU的操作系统:32位和64位的硬件可以在L ...

  7. mysql-tar包搭建过程

    第一: wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz tar z ...

  8. kubernetes 外部访问集群暴露端口服务

    在yaml文件中多个不同类型资源可以用“---”在划分 name: httpd2-svc namespace: kube-public    #给资源分配网络   所用资源将在 kube-public ...

  9. BZOJ2565最长双回文串——manacher

    题目描述 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同).输入长度为n的串S,求S的最长双回文子串T,即可将T分为两 ...

  10. HYSBZ1036-树链剖分-点权

    树链剖分,点权,单点更改,路径查询.学树链剖分下面这个博文不错 http://blog.csdn.net/y990041769/article/details/40348013 线段树必须写的很熟练才 ...