• 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])
    
  • 相关阅读:
    QT QFileDialog::getOpenFileName 对文件名进行过滤
    LeetCode 17 Letter Combinations of a Phone Number
    安装terminator与配置
    导出 .bag 文件 pointcloud 话题 到 pcd文件
    Spring SpringMVC文件上传错误(二)
    Spring SpringMVC文件上传错误(一)
    Spring配置文件中的file与classpath
    常用python的标准库
    Django之天天生鲜项目
    Django之富文本编辑器
  • 原文地址:https://www.cnblogs.com/-xct/p/12051321.html
Copyright © 2020-2023  润新知