Django:模型model和数据库mysql(一)
以一个栗子尝试来记录:
两个表存储在数据库中,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(一)的更多相关文章
- Django:模型model和数据库mysql(二)
上一篇把简单的模型与数据库的搭建写了一遍,但模型中有很多深入好用的写法补充一下. 同样的栗子,建立新的模型与数据库来写一写 1.依然是搭建环境 >>>django-admin sta ...
- Scrapy中使用Django的Model访问数据库
Scrapy中使用Django的Model进行数据库访问 当已存在Django项目的时候,直接引入Django的Model来使用比较简单 # 使用以下语句添加Django项目的目录到path impo ...
- Django进阶Model篇001 - mysql 数据库的配置
django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见: https://docs.djangop ...
- Django进阶Model篇—数据库操作(ORM)
一.数据库配置 django 默认支持sqlite.mysql.oracle.postgresql数据库,像db2和sqlserver之类的数据库需要第三方的支持,具体详见https://docs.d ...
- django使用model创建数据库表使用的字段
Django通过model层不可以创建数据库,但可以创建数据库表,以下是创建表的字段以及表字段的参数.一.字段1.models.AutoField 自增列= int(11) 如果没有的话,默认会生成一 ...
- Django模型Model的定义
概述 Django对各种数据库提供了很好的支持,Django为这些数据库提供了统一的调用API,可以根据不同的业务需求选择不同的数据库. 模型.属性.表.字段间的关系 一个模型类在数据库中对应一张表, ...
- django -- 为model 指定数据库名
一.为model指定数据库名: django自己实现的ORM中.如果要指定一个model的表名是通过Meta类来实现的. from django.db import models # Create y ...
- Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)
一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...
- Django框架model实现数据库增删查改
1.创建Django工程 https://www.cnblogs.com/CK85/p/10159159.html 2.在model.py中配置生成表格的类对象. from django.db imp ...
随机推荐
- primary库新增数据文件后,standby库无法创建文件并终止数据同步
主库是RAC环境,使用asm存放数据文件,备库是操作系统本地文件系统存放数据文件.在主库执行以下操作: SQL> alter tablespace ysdv add datafile '+dat ...
- 【R作图】lattice包,画多个分布柱形图,hist图纵轴转换为百分比
一开始用lattice包,感觉在多元数据的可视化方面,确实做得非常好.各种函数,可以实现任何想要实现的展示. barchart(y ~ x) y对x的直方图 bwplot(y ~ x) 盒形图 den ...
- mac mini纯键盘操作连接蓝牙鼠标
许久不开家里的MAC MINI了,今天开来玩玩,结果进个桌面连接鼠标就费了好大的劲 现实情况: 1. 没有有线鼠标,只有一个USB键盘,一个微软3600蓝牙鼠标 MAC MINI连接上USB键盘,开机 ...
- 物联网架构成长之路(9)-双机热备Keepalived了解
1. 前言 负载均衡LB,高可用HA,这一小结主要讲双机热备方案保证高可用.这里选择Keepalived作为双机热备方案,下面就对具体的配置进行了解.2. 下载Keepalived wget http ...
- (转) mysql中left join,right join,inner join的区别
转自:https://blog.csdn.net/qq_35975416/article/details/78842958 sql查询中有一个非常重要的环节就是表的关联查询,一般使用left join ...
- 11gr2 RAC安装INS-35354问题一例
转自:http://www.askmaclean.com/archives/11gr2-rac安装ins-35354问题一例.html 今天在安装一套11.2.0.2 RAC数据库时出现了INS-35 ...
- 小矮人Javascript模块加载器
https://github.com/miniflycn/webkit-dwarf 短小精悍的webkit浏览器Javascript模块加载器 Why 我们有许多仅基于webkit浏览器开发的应用 无 ...
- mysql解除死锁状态
方案一: 1.查看是否有锁表 show OPEN TABLES ; 2.查询进程(如果你有SUPER权限,你可以看到所有线程.否则,只能看到你自己的线程) show processlist; 3.杀死 ...
- SmileyCount.java笑脸加法程序代写(QQ:928900200)
SmileyCount.java 1/4Java Programming 2014Course Code: EBU4201Mini ProjectTask 1 [30 marks]SmileyCoun ...
- 【消息】Pivotal Pivots 开源大数据处理的核心组件
Pivotal Pivots 开源大数据处理的核心组件 Pivotal 今天宣布将其大数据套件的三个核心组件开源,同时商业版本继续提供更高级特性和商业支持服务. 这三个开源的组件分别是: GemFir ...