手动建立一个MySQL数据库python
配置数据库mysql
ENGINE MySQL NAME 数据库的名字 HOST ip PORT 3306 USER 用户名 PASSWORD 密码
在与settings同级目录下的__init__.py
中写代码:sql
import pymysql pymysql.install_as_MySQLdb()
写models:数据库
form django.db import models class Publisher(models.Model): name = models.CharField(max_length=32)
执行迁移的命令django
python manage.py makemigrations # 检查已经注册的APP下面的models.py的变动状况 python manage.py migrate # 执行迁移
ORMapp
对象关系映射spa
对应关系:code
类 _> 表orm
对象 _> 数据行(记录)对象
属性 _> 字段
ORM能作的事情:对数据作修改、对表作修改
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=32) # 一对多的关系 class Book(models.Model): name = models.CharField(max_length=32) pub = models.ForeignKey(to='Publisher',on_delete=None) def __str__(self): return self.name
from app01 import models models.Publisher.objects.all() #查询全部的数据 QuerySet 对象列表 models.Publisher.objects.get(name='xxx') #查询一条数据 只能查有且惟一的数据 models.Publisher.objects.filter(name='xxx') #查询全部知足条件的数据 对象列表 for book in all_books: print(book) print(book.id) print(book.pk) print(book.name) print(book.pub) # 所关联的出版社对象 对象.外键 print(book.pub_id) # 所关联的出版社对象的id 对象.外键_id
obj = models.Publisher.objects.create(name='xxxx') models.Book.objects.create(name=book_name, pub=models.Publisher.objects.get(pk=pub_id)) obj = models.Book.objects.create(name=book_name, pub_id=pub_id) obj = models.Publisher(name='xxxx') obj.save() # 保存到数据库 obj = models.Book(name='xxx',pub_id=出版社的对象id) obj.save() 多对多的新增: 书对做者 book_id = request.POST.getlist('book_id') # 插入数据 obj = models.Author.objects.create(name=author_name) obj.books.set(book_id) # 设置多对多的关系
models.Publisher.objects.filter(pk=pk).delete() # 批量删除 models.Publisher.objects.get(pk=pk).delete() # 单条数据的删除
models.Book.objects.filter(pk=pk).update(name=book_name,pub_id=pub_id) # 批量更新 obj = models.Book.objects.filter(pk=1).first() obj.name = 'xxxx' obj.pub_id = 2 # book_obj.pub = 出版社的对象 obj.save() #保存更新
class Book(models.Model): name = models.CharField(max_length=32) pub = models.ForeignKey('Publisher', on_delete=models.CASCADE) """ on_delete 在2.0版本以后是必填的 on_delete= models.CASCADE 级联删除 PROTECT 保护 SET(1) SET_DEFAULT 设置为默认值设置为某一个值 SET_NULL 设置为空 DO_NOTHING 什么都不变 """
class Pulisher(models.Model): name = models.CharField(max_length=32) class Book(models.Model): name = models.CharField(max_length=32) pub = models.ForeignKey('Pulisher',on_delete=models.DO_NOTHING) class Author(models.Model): name = models.CharField(max_length=32) books= models.ManyToManyField(to='Book')
# 查询 book_obj.pub # 所关联的对象 book_obj.pub_id 所关联的对象的id author_obj.books # 关系管理对象 author_obj.books.all() # 所关联的全部的书籍对象
# 新增 Book.objects.create(name='xxx',pub=对象) Book.objects.create(name='xxx',pub_id=对象的ID) obj= Book(name='xxx',pub_id=对象的ID) obj.save() obj = Author.objects.create(name='xxx') obj.books.set([书籍id,书籍id])
# 删除 Book.objects.filter(pk=pk).delete() # QuerySet 删除 Author.objects.get(pk=pk).delete() # 对象 删除
# 编辑 Book.objects.filter(pk=pk).update(name='xxx') book_obj.name ='xxxx' book_obj.save() Author.objects.filter(pk=pk).update(name='xxx') author_obj.books.set([id,id])