• Django数据库操作


    数据库的操作:

    1.简单的操作数据库:

      在调用数据库mysql是,有的需要在project的app下__init__.py添加:

        import  pymysql

        pymysql.install_as_MySQLdb()

      在定义字段时,如果没有指定null=True,默认情况下 null=False ,即非空

    复制代码
    创建数据库:
        class Book(models.Model):
            id = models.AutoField(primary_key=True)
            author = models.CharField(max_length=100,null=False)
            price = models.FloatField(default=0)
    添加数据:
        1.book = Book(name='西游记', author='吴承恩', price=100)
      2.book_dic = {'name'='三国演义', 'author'='罗贯中','price'=100}
        Book.object.create(**book_dic)
    查询数据:pk --> primary key 1.book = Book.objects.get(pk=2) 2.book = Book.objects.filter(name='三国演义') 删除数据: book.delete() 修改数据: book.price = 200 在增删改查操作中,最后需要保存,即 book.save()
    复制代码

    2.模块常用属性

    复制代码
    AutoField:
        映射到数据库是int类型,可以有自动增长的特性,一般不需要使用这个类型,
        不指定主键,那么模型会自动的生成一个叫id的自动增长的主键
        如果想指定一个其他名字的并且具有自动增长的主键,也可使用
    BigButoField:
        64位整形,自增长
    BooleanField: 布尔值类型
      在模块层面接收的是True/False,在数据库层面是tinyint类型
    NullBooleanField:
      可以为空的布尔值
    CharField: (max_length):
      在数据库层面是varchar类型,在python层面就是普通的字符串,需要指定最大长度,即必须传递max_length参数值

     EmailFiled:
       邮箱,默认大小为254
       可输入其他字符串格式,主要用处在前端提交表单
     FlotField:
       浮点类型,映射到数据库类型float
     TextField:
       映射到数据库类型是longtext,用于文章类存储
     DateField:
       日期类型,映射到数据库是date类型
       参数:
          auto_now_add:是在第一次添加数据进去的时会自动获取当前时间
          auto_now:每次这个对象调用save方法的时候都会将当前时间更新
     DateTimeField:
       日期时间类型,不仅可以存储日期,还可以存储时间,映射到数据库是datetime类型
       可使用auto_now_add, auto_now参数
     TimeField:
       时间类型,在数据库中time类型

    复制代码

     3.外键和表的关系

      表名的设置:

    复制代码
    在创建表名时,Django默认是表名格式为 app名_表名
    如果需要重定义表名,则重写Meta模块
    class Classes(models.Model):
        id = models.AutoField(primary_key=True)
    
        class Meta: 
            db_table = 'Classes'        
    复制代码

     两张表的关联操作

      创建表

    复制代码
    book/model.py
    class Category(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() category = models.ForeignKey("Category",on_delete=models.CASCADE) #on_delete是设置两张表的级别,CASCADE为级别关联 (同app下的设置外键)
       autor = models.ForeignKey("front.Front",on_delete=models.CASCADE,null=True) #对front下的Front表设置外键

    复制代码

    创建另一个app下的表

     

    front/model.py
    class Front(models.Model):
        username = models.CharField(max_length=100)

    1.添加表数据

    复制代码
    book/views.py
    def index(request): article = Article(title='abc',content='111') category = Category(name='最新文章') category.save() article.category = category article.save() return HttpResponse("seccess")
    复制代码

     添加数据后的

    2.另一种添加表数据:

    复制代码
    def one_to_many_view(request):
        category = Category.objects.first()
        article = Article(title='大神片', content='没得看')
        article.author = Front.objects.first()
        category.articles.add(article,bulk=False)      #bulk的作用在于:自动保存数据库article,category
        return HttpResponse("success")
    复制代码

    两种方式的不同之处在于,第一种是通过article调用添加,第二种是category调用添加 

     对自身的外键引用

    book/model.py
    class Conment(models.Model): content = models.TextField() origin_comment = models.ForeignKey('self',on_delete=models.CASCADE) #或者:origin_comment = models.ForeignKey('Conment',on_delete=models.CASCADE)

     4.一对多关系表操作:

    在Django中,假设存在 A表,B表,其中A表被B表引用并设置外键
       即:A:id、username
             B:id、concent、author_id(外键A中id)
       Django会在A模型中创建一个以B_set()的函数

    实例操作:

    复制代码
    model.py
    class Category(models.Model):
        name = models.CharField(max_length=100)
    
    class Article(models.Model):
        title = models.CharField(max_length=100)
        content = models.TextField()
      #可以修改article_set():category = models.ForeignKey("Category",on_delete=models.CASCADE,related_name='articles') category = models.ForeignKey("Category",on_delete=models.CASCADE) views.py: #获取某个分类下所有的文章 def index(request): category = Category.objects.first() article = category.article_set.first() #article_set可以被修改 print(article.title) return HttpResponse("success")
    结果:三国演义
    复制代码

    表内容如下

     

    Django的常用DRM查询:

    参考:https://blog.csdn.net/qq_34493908/article/details/81352784
  • 相关阅读:
    又回来咯
    4 20210412-1 原型设计作业
    3 20210405-1 案例分析作业
    202103226-1 编程作业
    阅读任务
    准备工作
    原型设计作业
    案例分析
    编程作业
    构建之法读后感
  • 原文地址:https://www.cnblogs.com/tang-s/p/9650060.html
Copyright © 2020-2023  润新知