第一篇-Django建立数据库各表之间的联系(上)
多表操作(一对多)
遇到的问题:
执行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建立数据库各表之间的联系(上)的更多相关文章
- 第二篇-Django建立数据库各表之间的联系(中)
上篇中已经建立了两个table,Book和Publish.这篇介绍如何用python增删改查数据库中的数据. 在views.py中创建一个index函数 from django.shortcuts i ...
- 第三篇-Django建立数据库各表之间的联系(下)
中篇介绍的是添加,下篇主要介绍查询 通过一个Book表的书的信息查询Publish表中出版社的信息 def addbook(request): # Book.objects.create(name=& ...
- Django框架 之 Form表单和Ajax上传文件
Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...
- Kettle 实现mysql数据库不同表之间数据同步——实验过程
下面是试验的主要步骤: 在上一篇文章中LZ已经介绍了,实验的环境和实验目的. 在本篇文章中主要介绍侧重于对Kettle ETL的相应使用方法, 在这里LZ需要说明一下,LZ成为了避免涉及索引和表连接等 ...
- 第一篇:Django基础
Django框架第一篇基础 一个小问题: 什么是根目录:就是没有路径,只有域名..url(r'^$') 补充一张关于wsgiref模块的图片 一.MTV模型 Django的MTV分别代表: Model ...
- MySQL 第一篇:初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- python、第一篇:初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- sql server DDL语句 建立数据库 定义表 修改字段等
一.数据库:1.建立数据库 create database 数据库名;use 数据库名; create database exp1;use exp1; mysql同样 2.删除数据库 drop dat ...
- day1_安装及建立数据库和表
#第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...
随机推荐
- dbexpress连接mysql提示Operation not allowed on a unidirectional dataset
最近刚接触delphi,在了解到dbExpress连接mysql的时候,出现了一些问题,特记录下 我遇到的问题有两个 1. TDBGrid --DataSet=TDataSource1 TDataSo ...
- Draw your Next App Idea with Ink to Code
Imagine that you’ve just been struck by inspiration for your next great app. You might start by jott ...
- codeforces285B
Find Marble CodeForces - 285B Petya and Vasya are playing a game. Petya's got n non-transparent glas ...
- Go For It ,一个灵活的待办事项列表程序
导读 Go For It,是我们开源工具系列中的第十个工具,它将使你在 2019 年更高效,它在 Todo.txt 系统的基础上构建,以帮助你完成更多工作. 每年年初似乎都有疯狂的冲动想提高工作效率. ...
- 目前市场上有些什么样的数据库管理系统(DBMS),它们都有什么特点?它们之间的优缺点有什么?它们的使用场合分别是?
1 要求 目前市场上有些什么样的数据库管理系统(DBMS),它们都有什么特点?它们之间的优缺点有什么?它们的使用场合分别是? 1.1 目前市场上有些什么样的数据库管理系统(DBMS) 目前市场上的数据 ...
- Spring模块介绍
GroupId ArtifactId 说明 org.springframework spring-beans Beans 支持,包含 Groovy org.springframework spring ...
- django.db.utils.DataError: (1406, "Data too long for column 'gender' at row 1")
报错现象 在使用 django 创建 超级用户的时候提示报错 Password (again): ytyt521521 Traceback (most recent call last): File ...
- thinkphp 5内置验证规则-基本版
内置规则 系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如: 'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用 ...
- nmap 常用命令
10.1.1.0/24 = 10.1.1.1-10.1.1.255 #c段扫描10.1.1.0/16 = 10.1.1.1-10.1.255.255 #b段扫描10.1.1.0/8 = ...
- HNOI2019总结
HNOI2019总结 Day 1 开场看三道题,T1是个计算几何,T2是个操作树加\(border\),T3题意有点复杂.想T1想了半个多小时,发现那个钝角不是很会处理,但是40分暴力应该还是可以写, ...