数据库基本操作Q和F

2018-02-12  本文已影响14人  两点半的杂货铺

Q和F

from django.db.models import F
models.Tb1.objects.update(num=F('num')+1)

通常,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)

一.创建表

二、使用mysql数据库

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testuser',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT': '3306',
    }
}

注明:由于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)
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')
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')
def index(request):
    from cm import models
    obj = models.Book.objects.all()
    #打印内容<QuerySet [<Book: Book object>, <Book: Book object>]>
    print(obj)
    return  HttpResponse('ok')
def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="python")
    print(obj)
    return  HttpResponse('ok')
def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="python")
    print(obj)
    return  HttpResponse('ok')
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日至当天之间的所有记录。

def index(request):
    from cm import models
    obj = models.Book.objects.filter(price=199).update(name = "c")
    print(obj)
    return  HttpResponse('ok')
def index(request):
    from cm import models
    obj = models.Book.objects.filter(price=199).delete()
    print(obj)
    return  HttpResponse('ok')
上一篇 下一篇

猜你喜欢

热点阅读