zoukankan      html  css  js  c++  java
  • 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])
    
  • 相关阅读:
    Ajax基础:3.Json
    Head First Design Patterns State Pattern
    Head First Design Patterns Template Method Pattern
    Articles For CSS Related
    Head First Design Patterns Decorator Pattern
    代码审查工具
    How To Be More Active In A Group
    Head First Design Patterns Factory Method Pattern
    Head First Design Patterns Composite Pattern
    Tech Articles
  • 原文地址:https://www.cnblogs.com/-xct/p/12051321.html
Copyright © 2011-2022 走看看