waker

waker 查看完整档案

杭州编辑台州学院  |  计算机科学与技术 编辑广州速聘信息技术有限公司  |  PHP开发工程师 编辑编辑
编辑

去去去

个人动态

waker 赞了回答 · 2019-03-15

解决sqlalchemy如何拼接多个filter

如果你看一下filter()的源码就会发现它的原型是def filter(self, *criterion):,其中*criterion是一个可变位置参数,所以,我们可以将一个listtuple解包后传递给它:

query_list = [
    User.id > 0,
    User.id <= 3,
]
Session.query(User).filter(*query_list)

关注 3 回答 3

waker 提出了问题 · 2019-03-04

解决sqlalchemy如何拼接多个filter

想简单封装下sqlalchemy,增删改查
sqlalchemy多条件查询:
Session.query(user).filter(user.id>0).filter(user.id<=3).all()
如果条件有多个,条件数量不知,可能1个filter,可能5个

问题:如何写这样的查询,能把多个filter拼接起来

关注 3 回答 3

waker 提出了问题 · 2018-12-24

numpy如何处理第n个到第m个的元素

vector = np.array([2,4,6,8,10])
处理1:第2到第4个元素,取反

vector = np.array([1,2,3,4,5,6])
vector[vector>2]
vector[np.where(vector>3)]

处理2:大于2 小于8的值取反

自己的想法:
vector[vector>1 and vector<5]
报错:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

很疑惑为什么范围判读都做不了

关注 1 回答 1

waker 赞了回答 · 2018-11-07

解决mysql添加索引,查询反而变慢

依照楼主的数据,我也造了400万数据:

mysql> select * from index_test limit 5;
id1id2
1111111111
2222222222
1111111111
2222222222
1111111111

id1创建索引
执行确实是id2谓词条件比较快:
mysql> select * from index_test where id1=11111;
2097152 rows in set (3.00 sec)
mysql> select * from index_test where id2=11111;
2097152 rows in set (2.32 sec)
id1的profile是这样的:
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000080 |
| checking permissions | 0.000014 |
| Opening tables | 0.000024 |
| init | 0.000033 |
| System lock | 0.000015 |
| optimizing | 0.000018 |
| statistics | 0.035408 |
| preparing | 0.000033 |
| executing | 0.000007 |
| Sending data | 2.963681 |
| end | 0.000021 |
| query end | 0.000015 |
| closing tables | 0.000020 |
| freeing items | 0.003474 |
| logging slow query | 0.000117 |
| cleaning up | 0.000072 |
+----------------------+----------+

id2的profile是这样的:
StatusDuration
starting0.000074
checking permissions0.000012
Opening tables0.000025
init0.000032
System lock0.000014
optimizing0.000018
statistics0.000025
preparing0.000019
executing0.000006
Sending data2.318096
end0.000020
query end0.000034
closing tables0.000022
freeing items0.004327
logging slow query0.000093
cleaning up0.000060

可以看到id1耗时相对显著的是statistics,Sending data,主要集中在Sending data。
Sending data
The thread is reading and processing rows for a SELECT statement, and sending data to the client。
也就是说,id1=11111比id2=11111花费更多的时间在数据读取上。而id1上的是二级索引,用到该索引还有一个回表的花销,在这种数据基数小,索引的选择性就太差,这种情况不应该使用索引。
如果非要使用索引,就要避免回表,创建覆盖索引。
alter table index add index com_idx(id1,id2);
测试结果就可以看到id1=11111比id2=11111快了:
mysql> select * from index_test where id1=11111;
2097152 rows in set (1.71 sec)
mysql> select * from index_test where id2=11111;
2097152 rows in set (2.57 sec)
对应profile如下:

id1=11111
StatusDuration
starting0.000149
checking permissions0.000084
Opening tables0.000032
init0.000026
System lock0.000013
optimizing0.000013
statistics0.000198
preparing0.000019
executing0.000006
Sending data1.710508
end0.000024
query end0.000015
closing tables0.000019
freeing items0.003275
logging slow query0.000068
cleaning up0.000025
id2=11111
StatusDuration
starting0.000066
checking permissions0.000012
Opening tables0.000020
init0.000024
System lock0.000011
optimizing0.000013
statistics0.000021
preparing0.000015
executing0.000006
Sending data2.566770
end0.000025
query end0.000077
closing tables0.000034
freeing items0.004227
logging slow query0.000093
cleaning up0.000018

关注 5 回答 4

waker 赞了回答 · 2018-11-07

解决mysql添加索引,查询反而变慢

800万条数据 一半111一半222,你建立的索引的区分度不高,mysql优化器不会使用索引而会选择全表扫描 可以explain查看搜索计划

关注 5 回答 4

waker 提出了问题 · 2018-10-25

解决mysql添加索引,查询反而变慢

1.表结构,time1添加普通索引:

CREATE TABLE `time_table` (
    `time1` INT(11) NULL DEFAULT NULL,
    `time2` INT(11) NULL DEFAULT NULL,
    INDEX `time1` (`time1`)
)
ENGINE=MyISAM
;

2.蠕虫复制创建200万条数据

insert into time_table select * from time_table


3.开始查询:time1有索引,time2没索引,数据200万

set profiling=1;
select * from time_table where time2=1111111;
select * from time_table where time1=1111111;
show profiles;

4.结果,加了索引反而变慢了:

clipboard.png

重新反思,蠕虫复制的表的内容过于简单了,总共400百万条数据,200万条数据time1=11111,time2=11111,还有200万条数据,time1=22222,time2=22222,

重新制造200万条数据,先蠕虫复制400百万条数据,time2=1,然后新加字段time1(自增),在update time2=time1,
最终的表如下(time1是唯一索引):

clipboard.png

查询时间分析,符合预期:

clipboard.png

然后改成唯一索引,也符合预期:

clipboard.png

但是依旧有问题:
为什么800万条数据,数据几乎一样(一半为111111,一半为2222)

clipboard.png
添加索引的字段,反而查询更慢。

自己的猜想:数据一样,索引是不是作用效果几乎没有,但是因为有了索引,字段存储空间多了,查询慢了,纯属自己乱想,希望可以解答一二!

希望可以交流下,qq:2210170490

关注 5 回答 4

waker 提出了问题 · 2018-09-09

django是不是不适合开发既有admin又有api又有web的网站?

问题:
如果一个网站有admin(后台),api接口,web站点,数据库共用,感觉models共用做不到,所以有疑问,Django是不是只适合开发后台管理类型的网站。

关注 2 回答 1

waker 提出了问题 · 2018-09-03

django如何创建优秀的项目目录

我想设计的目录结构

clipboard.png

理由:
一个项目一般有管理后台(admin),web网站(web)和api接口(api),考虑到models是公用的,想统一挪出来,公用的helpers和library这个就不说了,settings是整个project(myshop)的设置,应该放在最外面。
以admin举例,urls.py就是路由,感觉放在admin目录里更适合,所有views操作放在views,模板放templates,静态文件放static.

问题:
model会有很多,所以用models.py来写所有model相关的代码肯定不适合,goods相关用goods_models,order相关用order_model,但是这样的话,make migrations肯定不会有作用了。如果一定要用goods_model,是否得去了解整个migration的机制,然后修改,还是说,django不推荐这样的目录设计。

看了下djaon的auth的目录结构,路径:site-packagesdjangocontribauth
目录:

clipboard.png

auth有自己的model,migration,admin也有自己的model,migration,但是一个项目有web,admin,api,然后admin下有user,auth,goods,order,account,等等几十个逻辑模块,这样的项目管理肯定不适合。所以在实际生产中,目录结构是如何设计的,一般需要做哪些调整

关注 1 回答 0

waker 提出了问题 · 2018-09-03

django如何创建优秀的项目目录

我想设计的目录结构

clipboard.png

理由:
一个项目一般有管理后台(admin),web网站(web)和api接口(api),考虑到models是公用的,想统一挪出来,公用的helpers和library这个就不说了,settings是整个project(myshop)的设置,应该放在最外面。
以admin举例,urls.py就是路由,感觉放在admin目录里更适合,所有views操作放在views,模板放templates,静态文件放static.

问题:
model会有很多,所以用models.py来写所有model相关的代码肯定不适合,goods相关用goods_models,order相关用order_model,但是这样的话,make migrations肯定不会有作用了。如果一定要用goods_model,是否得去了解整个migration的机制,然后修改,还是说,django不推荐这样的目录设计。

看了下djaon的auth的目录结构,路径:site-packagesdjangocontribauth
目录:

clipboard.png

auth有自己的model,migration,admin也有自己的model,migration,但是一个项目有web,admin,api,然后admin下有user,auth,goods,order,account,等等几十个逻辑模块,这样的项目管理肯定不适合。所以在实际生产中,目录结构是如何设计的,一般需要做哪些调整

关注 1 回答 0

waker 提出了问题 · 2018-09-01

django如何创建优秀的项目目录

我想设计的目录结构

clipboard.png

理由:
一个项目一般有管理后台(admin),web网站(web)和api接口(api),考虑到models是公用的,想统一挪出来,公用的helpers和library这个就不说了,settings是整个project(myshop)的设置,应该放在最外面。
以admin举例,urls.py就是路由,感觉放在admin目录里更适合,所有views操作放在views,模板放templates,静态文件放static.

问题:
model会有很多,所以用models.py来写所有model相关的代码肯定不适合,goods相关用goods_models,order相关用order_model,但是这样的话,make migrations肯定不会有作用了。如果一定要用goods_model,是否得去了解整个migration的机制,然后修改,还是说,django不推荐这样的目录设计。

看了下djaon的auth的目录结构,路径:site-packagesdjangocontribauth
目录:

clipboard.png

auth有自己的model,migration,admin也有自己的model,migration,但是一个项目有web,admin,api,然后admin下有user,auth,goods,order,account,等等几十个逻辑模块,这样的项目管理肯定不适合。所以在实际生产中,目录结构是如何设计的,一般需要做哪些调整

关注 1 回答 0

认证与成就

  • 获得 10 次点赞
  • 获得 132 枚徽章 获得 2 枚金徽章, 获得 33 枚银徽章, 获得 97 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2016-02-19
个人主页被 678 人浏览