web 开发(4)- 数据库sql

sql创建数据库

image

  1. sudo mysql 进入
  2. mysql> create database book_01

安装 mysqlclient

sudo apt-get install libmysqlclient-dev
sudo apt-get update

远程控制SQL

  1. 得到远程密码
    sudo cat /etc/mysql/debian.cnf
  2. 获取IP地址
    ifconfig
    sudo mysql
  3. 问题一,不允许远程控制
    先进入本地
    : mysql -u root -p
    mysql: show databases;
    mysql: use mysql;
    mysql: show tables;
    mysql: select host , user from user;
    这里,host 字段,表示可以登录的主机名字和方式,user字段,代表用户名
    mysql: update user set host='%' where user='root';
    mysql: flush privileges;

命令行增加

image

增删改查

使用shell
python manage.py shell

增加数据

方式一,必须使用save方法才能将数据保存

from book.models import BookInfo
book = BookInfo(
name = 'Django',
pub_data= '2010-7-4',
readcount= 10
)
book.save()
复制代码到shell里面运行

方式二 objects相当于一个代理,实现增删改查

BookInfo.objects.create(
name = 'ceshikaifa',
pub_data = '2033-7-7',
)

修改数据

方式一

%% select * from bookinfo where id=6

book = BookInfo.objects.get(id = 8)
book.name = 'yunweikaifa'
book.save() 保存必须使用这个方法

修改数据方式二

%% filter 过滤器

BookInfo.objects.filter(id=8).update(name='pachongrumen',commentcount = 6)

删除数据

方式一

book = BookInfo.objects.get(id=8)
book.delete()

删除数据方式二

BookInfo.objects.filter(id=5).delete()

查询数据

% get查询单一结果,如果不存在会抛出模型类 .DoesnotExist异常

book = BookInfo.objects.get(id=1)
try:
book = BookInfo.objects.get(id=1)
except BookInof.DoesNotExist:
print('bucunzai')

BookInfo.objects.all() % 获取所有结果

查询结果数据量

BookInfo.objects.all().count()

过滤查询 filter

% filter 过滤多个结果
% exclude 排除多个结果
% get 过滤单一结果

% 模型名称.objects.filter(属性名__运算符=值) 双下划线

book = BookInfo.objects.get(id=1)
book = BookInfo.objects.get(id__exact=1)
book = BookInfo.objects.get(pk=1)
book = BookInfo.objects.filter(pk=1)[0]

BookInfo.objects.filter(name__contains = 'She')
BookInfo.objects.filter(name__endswith = 'She')

BookInfo.objects.filter(id__in=[1,3,5])
%% gt,gte,lt,lte,大于,大于等于,小于,小于等于
BookInfo.objects.exclude(id=3)

多字段比较

两个属性对比使用F对象,django.db.models
from django.db.models import F
% 模型类名.objects.filter(属性名__运算符=F('第二个属性名'))
from django.db.models import F
BookInfo.objects.filter(readcount__gte=F('commentcount'))

并且查询

BookInfo.objects.filter(readcount__gte=30).filter(id__lt=3)
BookInfo.objects.filter(readcount__gte=30,id__lt=3)

% 语法结果. 模型类名.objects.fitler(Q(属性名__运算法=值)&Q(属性名__运算法=值)&Q(属性名__运算法=值))

或者查询

% 语法结果. 模型类名.objects.fitler(Q(属性名__运算法=值)|Q(属性名__运算法=值)|Q(属性名__运算法=值))

from django.db.models import Q
BookInfo.objects.filter(Q(readcount__gt=20)|Q(id__lt=2))

聚合函数

% 模型类型名.objects.aggregate(xxx('字段名'))
from django.db.models import Sum,Max,Min,Avg,Count

BookInfo.objects.aggregate(Sum('readcount'))
BookInfo.objects.all().order_by('readcount')

% mysql 语句为 select * from bookinfo order by readcount (-号降序)
BookInfo.objects.aggregate(Sum('readcount'))

两个表的级联操作

由一对多的访问语法
一对应模型类对象.多对应模型类小写_set
book = BookInfo.objects.get(id=1)
book.peopleinfo_set.all()
上述代码表示在book1中所有多任务的名称

% 多对一反向查:含有外键,直接调用即可
from book.models import PeopleInfo
person = PeopleInfo.objects.get(id=1)
person.book.pub_data

关联查询的过滤查询

查询1的数据,条件为多
模型类型.objects.(关联模型类名小写__字段名__运算符=值)
BookInfo.objects.filter(peopleinfo__name__exact='guojing')
BookInfo.objects.filter(peopleinfo__name='guojing')

BookInfo.objects.filter(peopleinfo__description__contains='ba')

任务查询书籍,条件多对查询1

查询集QuerySet

posted @ 2024-09-08 20:08  温酒待君归  阅读(14)  评论(0)    收藏  举报
levels of contents