Django使用MySQL数据库的流程

Django使用MySQL数据库的流程

手动创建一个MySQL数据库

配置数据库

ENGINE   MySQL
NAME	数据库的名字
HOST    ip 
PORT    3306
USER    用户名
PASSWORD  密码

在与settings同级目录下的__init__.py中写代码:

import pymysql
pymysql.install_as_MySQLdb()

写models:

form django.db import models 
class Publisher(models.Model):
	name = models.CharField(max_length=32)

执行迁移的命令

python  manage.py  makemigrations  # 检查已经注册的APP下面的models.py的变更情况
python manage.py migrate   # 执行迁移 

ORM

对象关系映射

对应关系:

​ 类 _> 表

​ 对象 _> 数据行(记录)

​ 属性 _> 字段

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])
posted @ 2019-12-16 21:00  谢国宏  阅读(353)  评论(0编辑  收藏  举报