• 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
  • 相关阅读:
    List of the best open source software applications
    Owin对Asp.net Web的扩展
    NSwag给api加上说明
    'workspace' in VS Code
    unable to find valid certification path to requested target
    JMeter的下载以及安装使用
    exception disappear when forgot to await an async method
    Filter execute order in asp.net web api
    记录web api的request以及response(即写log)
    asp.net web api的源码
  • 原文地址:https://www.cnblogs.com/tang-s/p/9650060.html
Copyright © 2020-2023  润新知