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.btitleclass 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.hname5、启动服务器
在命令行输入
# 表示启动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 = '蛤蟆功')
转载于:https://www.cnblogs.com/kumata/p/9643989.html
总结
以上是生活随笔为你收集整理的Django:模型model和数据库mysql(一)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: vue中全局引入bootstrap.cs
- 下一篇: mysql-视图、触发器、事务、存储过程