美文网首页
数据库基本操作Q和F

数据库基本操作Q和F

作者: 两点半的杂货铺 | 来源:发表于2018-02-12 21:05 被阅读14次

Q和F

  • F使用查询条件的值,专门取对象中某列值的操作
from django.db.models import F
models.Tb1.objects.update(num=F('num')+1)
  • Q 构建搜索条件

通常,Q()对象使得定义查询条件然后重用成为可能。 它允许使用|OR)和&AND)操作[构建复杂的数据库查询]否则在特定情况下,QuerySets使用不了OR

from django.db.models import Q
q1=models.Book.objects.filter(Q(title__startswith='P')).all()
print(q1)#[<Book: Python>, <Book: Perl>]
# 可以组合使用&,|操作符,当一个操作符是用于两个Q的对象,它产生一个新的Q对象。
Q(title__startswith='P') | Q(title__startswith='J')
Q对象可以用~操作符放在前面表示否定,也可允许否定与不否定形式的组合
Q(title__startswith='P') | ~Q(pub_date__year=2005)

一.创建表

  • 继承from django.db import models
  • 注册app,在setting.pyINSTALLED_APPS注册
  • 写表的类
  • 分别输入python manage.py makemigrationspython manage.py migrations
  • 生成的表名默认是app名_类名,会自动创建一个主键叫id的字段

二、使用mysql数据库

django 默认使用sqlite数据库,当想使用mysql时,需要额外配置

  • 在setting.py 配置如下
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testuser',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT': '3306',
    }
}
  • 在project同名的配置的 init.py文件中

注明:由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替

import pymysql
pymysql.install_as_MySQLdb() 

三、操作数据的增删改查

  • 生成的表格式如下

from django.db import models

# Create your models here.
class Book(models.Model):
    name = models.CharField(max_length=20)
    price = models.IntegerField()
    pud_data = models.DateField()
    author = models.CharField(max_length=32)
class Author(models.Model):
    name = models.CharField(max_length=32)
  • 增加用法

  • 第一种用法save
  • 注:Django 使用一种直观的方式把数据库表中的数据表示成Python 对象:一个模型类代表数据库中的一个表,一个模型类的实例代表这个数据库表中的一条特定的记录。
def index(request):
    from cm import models
    obj = models.Book(name="python",price=199,pud_data="2017-11-11",author="wang")
    obj.save()
    return  HttpResponse('ok')
  • 第二种create方法
def index(request):
    from cm import models
    dic = {
        "name":"go", "price" : 19, 
        "pud_data" : "2016-11-11",
        "author" : "ang"
    }
    obj = models.Book.objects.create(**dic)
    obj.save()
    return  HttpResponse('ok')
  • 查询的用法

  • 简单all()/fittler()/exclude()/get()
  • all返回一个QuerySet,里面包含着是每一行的对象
def index(request):
    from cm import models
    obj = models.Book.objects.all()
    #打印内容<QuerySet [<Book: Book object>, <Book: Book object>]>
    print(obj)
    return  HttpResponse('ok')
  • fittler条件过滤使用,等同于sql中的where,返回的一个过滤后的QuerySet
def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="python")
    print(obj)
    return  HttpResponse('ok')
  • exclude返回一个新的QuerySet,它包含满足查询参数的对象
def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="python")
    print(obj)
    return  HttpResponse('ok')
  • get只有一个对象满足你的查询,也就是查询必须且只有一个返回符合的查询语句
def index(request):
    from cm import models
    obj = models.Book.objects.get(name="python")
    print(obj)
    return  HttpResponse('ok')
  • 链式查询小技巧
>>> Entry.objects.filter(
...     headline__startswith='What'
... ).exclude(
...     pub_date__gte=datetime.date.today()
... ).filter(
...     pub_date__gte=datetime(2005, 1, 30)
... )

这个例子最开始获取数据库中所有对象的一个[QuerySet](,之后增加一个过滤器,然后又增加一个排除,再之后又是另外一个过滤器。 最后的结果仍然是一个[QuerySet],它包含标题以”What“开头、发布日期在2005年1月30日至当天之间的所有记录。

  • 更改的用法

  • update,先查在改,不能使用get方法,因为update是qureyset对象的方法,get是一model对象
def index(request):
    from cm import models
    obj = models.Book.objects.filter(price=199).update(name = "c")
    print(obj)
    return  HttpResponse('ok')
  • 删除

  • 删除用delete
def index(request):
    from cm import models
    obj = models.Book.objects.filter(price=199).delete()
    print(obj)
    return  HttpResponse('ok')

相关文章

  • 数据库基本操作Q和F

    Q和F F使用查询条件的值,专门取对象中某列值的操作 Q 构建搜索条件 通常,Q()对象使得定义查询条件然后重用成...

  • Q语言——表的高级查询语言(一)

    前言 Q的表的基本操作与传统数据库的表的操作非常的相似,同时Q的表的操作还有一些传统数据库不具有的高级操作。但是可...

  • 八 Django数据库基本查询操作

    数据库基本操作(查询) 一、查询对象 从数据库里检索对象,可以通过模型的Manage来建立QuerySet,一个Q...

  • Django-数据库操作之F和Q对象

    一、F对象 之前的查询都是对象的属性与常量值比较,两个属性要如何比较呢?可以使用F对象,被定义在django.db...

  • django查询之Q对象

    Q()对象和F()对象类似,把一个sql表达式封装在对象中,这个对象可以用于数据库相关的操作注意这里提醒一下,如果...

  • model之F/Q操作

    F操作,使用查询条件的值 打个比方吧,有一张表,保存着公司员工的工资,公司普涨工资,如何在model中操作,这就用...

  • 2019-07-08

    数据库 MySQL数据库的基本操作(增删改查)高级操作视图备份和还原事务触发器函数存储过程 什么是数据库?数据库(...

  • 2022-09-15

    一、数据库基本操作

  • mongodb基本操作指令

    基本操作: 帮助 不同级别和命令 常用操作查看当前db版本 显示当前数据库 查询所有数据库 切换数据库 显示当前数...

  • greenDao辅助类

    /** * 数据库操作辅助类 */ public classDbReUser { private static f...

网友评论

      本文标题:数据库基本操作Q和F

      本文链接:https://www.haomeiwen.com/subject/jccqtftx.html