Django之数据库操作

1、创建model表,在setting中添加app名称、配置数据

from django.db import models

class userinfo(models.Model):
   #如果没有models.AutoField,默认会创建一个id的自增列
    name = models.CharField(max_length=30)
    email = models.EmailField()
    memo = models.TextField()

运行:python manage.py makemigrations     python manage.py migrate  生成相应的表
 如果后台要用到该表,还需在admin.py中注册,如下:

2、数据库增、删、改、查

查询篇

models.UserInfo.objects.all()
models.UserInfo.objects.all().values(‘user‘)             #只取user列
models.UserInfo.objects.all().values_list(‘id‘,‘user‘)   #取出id和user列,并生成一个列表
models.UserInfo.objects.get(id=1)
models.UserInfo.objects.get(user=‘yangmv‘)

增加篇

models.UserInfo.objects.create(user=‘yangmv‘,pwd=‘123456‘)
或者
obj = models.UserInfo(user=‘yangmv‘,pwd=‘123456‘)
obj.save()
或者
dic = {‘user‘:‘yangmv‘,‘pwd‘:‘123456‘}
models.UserInfo.objects.create(**dic)

删除篇

models.UserInfo.objects.filter(user=‘yangmv‘).delete()

修改篇

models.UserInfo.objects.filter(user=‘yangmv‘).update(pwd=‘520‘)
或者
obj = models.UserInfo.objects.get(user=‘yangmv‘)
obj.pwd = ‘520‘
obj.save()

常用方法:

# 获取个数
    #
    # models.Tb1.objects.filter(name=‘seven‘).count()
    # 大于,小于
    #
    # models.Tb1.objects.filter(id__gt=1)              # 获取id大于1的值
    # models.Tb1.objects.filter(id__lt=10)             # 获取id小于10的值
    # models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
    # in
    #
    # models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    # models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
    # contains
    #
    # models.Tb1.objects.filter(name__contains="ven")
    # models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
    # models.Tb1.objects.exclude(name__icontains="ven")
    # range
    #
    # models.Tb1.objects.filter(id__range=[1, 2])   # 范围bettwen and
    # 其他类似
    #
    # startswith,istartswith, endswith, iendswith,
    # order by
    #
    # models.Tb1.objects.filter(name=‘seven‘).order_by(‘id‘)    # asc
    # models.Tb1.objects.filter(name=‘seven‘).order_by(‘-id‘)   # desc
    # limit 、offset
    #
    # models.Tb1.objects.all()[10:20]
    # group by
    from django.db.models import Count, Min, Max, Sum
    # models.Tb1.objects.filter(c1=1).values(‘id‘).annotate(c=Count(‘num‘))
    # SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"

3、Django高级查询

filter查询:

1.  等于 exact。
例:查询name等于‘xiao ming’的学生
Student.objects.filter(name=‘xiao ming‘)
Student.objects.filter(name__exact=‘xiao ming‘)#此处的exact可以省略

2.  模糊查询 like
    包含 contains
例:查询姓名包含‘xiao‘的学生。
Student.objects.filter(name__contains=‘xiao‘)
开头:startswith 结尾:endswith
例:查询姓名以‘xiao‘开头的学生 以‘ming‘结尾的学生
Student.objects.filter(name__startswith=‘xiao‘)
Student.objects.filter(name__endswith=‘ming‘)

3.  空查询   isnull
例:查询姓名不为空的学生
Student.objects.filter(name__isnull=False)

4.  范围查询  in
例:查询年龄12或15或16的学生
Student.objects.filter(age__in=[12,15,16])

5.  比较查询 gt lt(less than) gte(equal) lte
例:查询年龄大于等于12的学生
Student.objects.filter(age__gte=12)

6. 日期查询 date 例:查询1994年出生的学生。
Student.objects.filter(birthyear__date=1994)
例:查询1994年1月1日后出生的学生。
Student.objects.filter(birthyear__date__gt = date(1994,1,1))

7. 返回不满足条件的数据 exclude
例:查询id不为3的学生。
Student.objects.exclude(id=3)

同时传递多个字段参数限制,但是这样传递的字段参数限制为与运算

Student.objects.filter(name=‘xiao ming‘,age=12)

但是我们要查询姓名是‘xiao ming‘或者年龄等于12该如何使用?Q对象可以用来在字段限制间进行逻辑运算(&,|,~)

from django.db.models import Q #引入
Student.objects.filter(Q(name=‘xiao ming‘)|Q(age=12))

 聚合函数:

QuerySet通过aggregate这个函数来实现聚合功能

使用前需先导入聚合类:
from django.db.models import Sum,Count,Max,Min,Avg
例:查询所有学生的数目
select count(*) from student;
Student.objects.aggregate(Count(‘id‘))
{‘id__count‘: 5} 注意返回值类型及键名
例:查询所有学生年龄和
Student.objects.aggregate(Sum(‘age’))
{‘age__sum’:120} 注意返回值类型及键名

 字段排序:

QuerySet 通过order_by来对字段进行排序

对年龄从小到大进行排序
Student.objects.all().order_by(‘age‘)
对年龄从大到小进行排序
Student.objects.all().order_by(‘-age‘)

 自定义查询语句

通过Django的connection对象直接执行SQL语句

cursor = connection.cursor()
sql=‘‘‘select name,age from student ‘‘‘
cursor.execute(sql) fetchall=cursor.fetchall()
students=[]
for object in fetchall:
	students.append({‘name‘:object[0],‘age‘:object[1]})

通过connection获取游标,然后通过游标执行SQL语句,通过fetchall函数返回查询结果,注意返回结果为一个集合,里面每个元素为一个数组,以select 后面字段顺序返回

我们可以使用同样方法对数据进行增加修改删除操作,不过与查询有点不同的是需要transaction进行提交修改

cursor = connection.cursor()
sql=‘‘‘update student set age=13 where name=‘xiao ming‘ ‘‘‘
cursor.execute(sql)
transaction.commit_unless_managed()

原文地址:https://www.cnblogs.com/honey-badger/p/8593578.html

时间: 2024-11-02 18:09:14

Django之数据库操作的相关文章

Django模型-数据库操作

前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开始,进入到了Django模型,也就是数据库操作. 自带 Sqlite3 数据库查询方式 为了简单,使用Python自带的Sqlite3数据库进行实例说明. 先看一个传统的数据库操作示例: 1 from django.shortcuts import render 2 import sqlite3 3

Django与数据库操作

Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArchemy (ORM) ORM 操作简单 (只把对象和类的操作 生成对应的sql语句) 创建,修改 数据表的时候简单 速度比原生的sql慢 -- 先转换成sql语句 原生sql执行会快 脚本运行Django的ORM操作数据库 import os,sys import django sys.path.ap

django models 数据库操作

django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class Message(models.Model): pass class Teacher(models.Model): pass class Student(models.Model): GENDER_CHOICES = ( ('male', "男"), ('female', "女&q

Django基础--数据库操作

Django中的模型(model)本质是数据库中的表(table),当作为开发者时,总会涉及到数据库的操作,而Django中也提供了一些函数,实现sql语句中的增删改查: 惯例,先看模型: 1 # coding:utf-8 2 import django.utils.timezone as timezone 3 from django.db import models 4 from blast_service.models import DiskInfo 5 # Create your mode

django学习-数据库操作接口API--(CRUD)

初试API(数据库操作接口CRUD) 现在我们进入交互式python命令行,尝试一下django为你创建的各种API,通过以下命令打开python命令行: py -3 manage.py shell进入python命令行 D:\django\mysite>py -3 manage.py shell Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32 Type &quo

django的数据库操作回顾

1.数据库操作 - 单表操作 - all - filter models.tb.objects.filter(id=123) dic = {'id': 123, 'age__gt': 3} models.tb.objects.filter(**dic) - count - order_by ... - 一对多 # id name 1 河北 2 广东 3 山东 class Province(models.Model): name = models.CharField(max_length=32,)

django 的数据库操作

Python代码 class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __unicode__(self): return self.name class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() def __unico

Django笔记-数据库操作(多对多关系)

1.项目结构 2.关键代码: data6.settings.py INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', ) DATABASES = { 'default': {

Django—ORM数据库操作

---恢复内容开始--- 一.orm介绍 1 ORM即Object Relational Mapping,全称对象关系映射. 优点: 1 不用写sql,不会sql的人也可以写程序 2 开发效率高 2 缺点: 1 可能sql的效率低 3 如何使用: 如果连接mysql:在setting里配置: 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', '