优优娱乐数据库大量数据update慢,如何克服?

( 优优娱乐 )

描述

数据库是postgresql python3

现在有1700万数据,最大ID3000万+

id link data
19001212 www.somelink.com some str

我的任务是爬虫,取出单条数据link id段,爬取数据返回给data.

update table set data = %s where id = %s
所以update操作需要根据id查询到数据,并返回。我测试了一下单条数据的更新需要0.1s.

我的想法

见识少,求教 下面是我的想法

  • 新建数据库a。从主数据库取任务,在acreate。但是问题是:在主数据中无法识别是否被爬取。因为查询语句select id,link from table where data is null;

  • 尝试新数据库,听说radis很快,不知道合不合适。求教

另外,最佳连接数是多少,之前不懂,做了5-6个连接。结果更新的数据更少,现在只有两个连接,反而很多。一小时2w数据

这是个好问题,认真回答的话能写不少。不过鉴于题目给出的信息量过少,就不发散了。

首先,每个更新100ms,你有检查过DB的瓶颈在哪里吗?磁盘慢吗?还是内存不够?不知道瓶颈靠瞎猜,很难解决问题。

其次,我想你的ID一定是有索引的对吧,否则应该更慢些。然后一个简单的改进就是,你不是每个更新都是一个Transaction吧,试一试攒个几百上千个update之后一次提交。

然后就是,我猜你有优化过PG的配置吧,如果没有的话,找这方面的资料看一看,试一试。

(看完/读完)这篇文章有何感想! 优优娱乐的分享…

优优娱乐99uuPython selenium2 如何获取动态ID呢

( 优优娱乐99uu )

登陆126邮箱时 通过几种定位都不行 真蛋疼

            代码如下:
            

from selenium import webdriver

driver = webdriver.Firefox
driver.gethttp://126.com
frame = driver.find_element_by_idx-URS-iframe
driver.switch_to.frameframe
id定位 时时变因为它的ID是动态的
driver.find_element_by_idauto-id-1479158591510.click
通过类名定位也定不到
driver.find_element_by_class_namej-inputtext dlemail.click
路劲定位也定不到
driver.find_element_by_xpath//[@id =”auto-id-1479158591510″].click*

用css selector来解决这个问题,代码如下,希望能解决你的问题

from selenium import webdriver
import time
driver = webdriver.Chrome"/Users/lvxiang/Downloads/chromedriver"
driver.gethttp://www.126.com/
frame = driver.find_element_by_idx-URS-iframe
driver.switch_to.frameframe
# XXXX替换为你的用名和密码
driver.find_element_by_css_selector"form input[name=email]".send_keys"XXXX"
time.sleep1

driver.find_element_by_css_selector"form input[name=password]".send_keys"XXXX"
time.sleep1
driver.find_element_by_id"dologin".click
print"登录成功"
time.sleep1
driver.close

(看完/读完)这篇文章有何感想! 优优娱乐99uu的分享…

优优娱乐99uuPython如何将数据库导出的数据一级级分类?

( 优优娱乐99uu )

lst = [{time: 2016-10-25, id: a1, type: 1, details: xxx},
       {time: 2016-10-25, id: a1, type: 1, details: xxx},
       {time: 2016-10-25, id: a2, type: 1, details: xxx},
       {time: 2016-10-25, id: a2, type: 2, details: xxx},
       {time: 2016-10-26, id: a1, type: 1, details: xxx},
       {time: 2016-10-26, id: a1, type: 2, details: xxx},
       {time: 2016-10-26, id: a2, type: 1, details: xxx},
       {time: 2016-10-26, id: a2, type: 2, details: xxx},
       {time: 2016-10-27, id: a1, type: 1, details: xxx},
       {time: 2016-10-27, id: a1, type: 1, details: xxx},
       {time: 2016-10-27, id: a2, type: 2, details: xxx},
       {time: 2016-10-27, id: a2, type: 2, details: xxx},
       {time: 2016-10-27, id: a2, type: 3, details: xxx},
       {time: 2016-10-27, id: a2, type: 3, details: xxx}]

结果:

lst = [{time: 2016-10-25, data: [{id: a1, data: [{type: 1, data: [{details: xxx}, {details: xxx}]}]},
                                       {id: a2, data: [{type: 1, data: [{details: xxx}]},
                                                             {type: 2, data: [{details: xxx}]}]}]},
       {time: 2016-10-26, data: [{id: a1, data: [{type: 1, data: [{details: xxx}]},
                                                             {type: 2, data: [{details: xxx}]}]},
                                       {id: a2, data: [{type: 1, data: [{details: xxx}]},
                                                             {type: 2, data: [{details: xxx}]}]}]},
       {time: 2016-10-27, data: [{id: a1, data: [{type: 1, data: [{details: xxx}, {details: xxx}]}]},
                                       {id: a2, data: [{type: 2, data: [{details: xxx}, {details: xxx}]},
                                                             {type: 3, data: [{details: xxx}, {details: xxx}]}]}]}]

就是对列表中的数据进行一级级分类,原始数据是随机的,先按time分类,后面按id,然后type分类,每一级的数据都放在data的下,data是一个列表

真实的数据量比较大,怎么高效写这段程序?Python代码,谢谢

import itertools

def group_byl, key, data_callback:
    return [{key: k, data: data_callbackg} for k, g in itertools.groupbyl, key=lambda x: x[key]]
    
groupbylst, time,
    lambda l: group_byl, id,
        lambda l: group_byl, type,
            lambda l: [{details: x[details]} for x in l]

是 SQL 语句问题吧,如果不是那么你得赋值很多次变量,互换值。

(看完/读完)这篇文章有何感想! 优优娱乐99uu的分享…

99优优娱乐平台flask web项目一个小问题(实在不知道怎么描述)?

( 99优优娱乐平台 )

flask web第十一章内容,我把判断写在html模板文件里,就报如下错误

如果在视图代码里让test=current_user.canPermission.WRITE_ARTICLES 然后把test传过去,html写成if test 就正常了。请指教,谢谢

user.can如下

def canself, permissions:
        return self.role is not None and self.role.permissions & permissions == permissions

看错误提示:

TypeError, unsupported operand types for &: int and Undefined

答案已经很明显了,说的就是,&这个运算操作符,不能连接intUndefined类型.
我看这里的权限运算应该是位运算,但是&符号右边的permissions 并没有定义,所以需要检查一下原因。

(看完/读完)这篇文章有何感想! 99优优娱乐平台的分享…

优优娱乐99uu使用pip freeze 和 pip freeze –all 和 pip list的区别?

( 优优娱乐99uu )

1.我今天在使用pip查看我安装的第三方扩展包的时候,发现pip freeze 和 pip list显示的扩展包不一样,pip freeze 显示出的包要少几个,然而pip freeze –all 和 pip list 显示的是一样的,请问这三个有什么区别?
2.

3.freeze显示的只有17个,而pip list 和 pip freeze –all显示了20个,
freeze 显示 少了 pip , wheel, setuptools.
4.国外的http://stackoverflow.com/ques…有pip freeze 和 pip list 的解释,可是我还是不懂这三个的区别?

这种场合先看参数说明

pip help freeze, 直接就告诉你了

–all 参数是 “Do not skip these packages in the output: pip, setuptools, distribute, wheel”

在virtualenv中, 这些包是必然存在的, 但是一般来说你的代码不会直接去调用这些包

(看完/读完)这篇文章有何感想! 优优娱乐99uu的分享…

优优娱乐99uu花半年的时间能把Python自学到什么程度?

( 优优娱乐99uu )

1.简单说一下我想自学Python的出发点,Python在数据的分析处理上有自己独特的优势,前些年的互联网一直在收集用户的信息,接下来要对数据进行分析,所以个人感觉Python在以后会更加受欢迎,个人比较喜欢的应用或者说网站大都以Python完成(比如网易云音乐,知乎),所以对这门语言比较有好感,感觉这样做数据分析推送的应用会成为主流;

2.然后我现在的情况,使用的语言是java,应届毕业生,学了有3年java,走web方向,三大框架和一些常见框架会用说不上理解多透彻,算法数据结构了解原理没有深入研究,网络前端框架也都会用,jvm有了解;现在在实习,所以问题中的半年指的是每天下班大概3个小时和周末两个半天这样的时间安排;

3.现在有点迷茫,我这样的程度是否应该转入Python,花半年的时间能学到什么程度,比较担心的是把时间花在了新语言的学习上,而java没有什么进步,到毕业的时候进退维谷;

补充一下:上手应该是很快的,Python这个语言要找工作的话应该也有一个大概的标准,我疑惑的是我花这些时间能不能达到找工作的这个程度;

诚心请教更有经验的你们,希望大家能给些建议,谢谢!

Just do it!

你3年java了,学Python一两个星期就能上手了。语言从来不是最大的问题,多积攒些工程经验、补充一下基础知识可能更重要的多。

况且就现在的形式,还是java就业容易一些。

  • 你学了3年Java,是天天在用吗?你1年产出的Java代码有几行呢?

  • 如果你对一门语言很熟悉,学习另外一门语言不用多长时间就可以照着文档撸demo了。

  • Java就业容易。Python因为其开发速度快一般会出现在一些初创公司,而初创公司大部分往往是精英团队;拿大厂来说,阿里就是典型的Java大户。而饿了么这个国内Python大厂也正在转到Java。

我来说下我的经历


毕业应聘的是java 开发,在公司搞了一阵java开发,然后就跑去做其他的,在走之前,我的精力相当分散,基本很久不写代码了,所以在苗头不对的时候,我就开始想找另一件事情来刺激自己。 

那时还挺喜欢去irc的,泡在archlinux channel 看他们漫天扯,在那里接触了他们是多么geek, 用python 做了好多事情,感觉棒棒哒,然后我渐渐沦陷了~

我就是一边工作一边学习python,记得当时看完python 基本大概三天的时间我没动手-囧,后面跟着廖雪峰的python 开始做实践~ 这个做完其实没做完-(ㄒoㄒ),然后就去玩django。 用django做了个项目1/3 就跑到上海去找工作了现在回想起来,我真的好勇敢


入了这一行,才能更快成长,加油!

(看完/读完)这篇文章有何感想! 优优娱乐99uu的分享…

优优娱乐前后端的数据如何实时对接?

( 优优娱乐 )

用户通过前端不断的添加任务,这些任务被压到数据库;然后,后端程序从数据库获取这些任务并执行。但是因为后端每次遍历数据库之间有个时差,导致有些任务创建后并不能立马被后端获取到,该任务也就不能立马执行了。如何让后端获取任务的过程中是实时的?

加机器…

只要是轮循就一定会有这个时间间隔。
mysql好像没有监听数据机制
你可以在前面加一层redis或者mq
1.前端添加任务
2.任务写入redis/mq,写入mysql
3.后端监听redis/mq,获取到任务执行,执行完成后更新mysql

mq就不用说了,都是监听
redis的用pubsub 来做
redis pubsub 用起来很简单。http://redis.cn/commands/pubs…
这样子后端执行任务的也可以搞并发

前端应该不能直接写数据库吧,前端应该是发送的请求,后端执行前端的请求,那么后端在完成写入数据库操作后,直接再发送一条请求执行任务的消息就行了。
当然这条消息也可以在前端收到写入成功消息后,再由前端发起,只是这么做显得不太合理,也浪费服务器资源。
这样后端执行任务的方式也不该是轮询,而应该改成监听响应。当监听到新任务的执行请求时,从数据库取数据,并添加到务队列中。

(看完/读完)这篇文章有何感想! 优优娱乐的分享…

优优娱乐django 中引用包的问题

( 优优娱乐 )

urls.py 中引用:

可以引用

和上面一个相比,最外面又套了一层lee文件夹

然后就不能引用了。。。

我又这样写:

可以引用包

但是我运行服务器时:

所以怎么弄呢???

——————————————————————————————————————————————————————
刚才试了一种方法,成功了:
我重新打开pycharm,不过没有直接打开lee 这个project,而是打开的leesir这个projct,然后就成功了,所以,我猜是pycharm的问题

其实在你项目的配置文件settings.py中的INSTALL_APPS中添加leesir就可以了

要么你的文件在django project的BASE_DIR下。

要么你把你的文件路径添加到系统路径中:

sys.path.appendyour_file_oath

(看完/读完)这篇文章有何感想! 优优娱乐的分享…

优优娱乐用python requests POST提交数据,但是无法模拟成功?

( 优优娱乐 )

1,我想通过python Requests获取和上传到公司的sharepoint网站数据,目前已经通过python模拟Windows验证成功并GET所需数据,但是在POST的时候,无法成功。
例如我想添加一个名为AP1test的用户到权限组中(后面有图)。
2,我在POST的时候,尝试过伪装Header,包括伪装cookie,结果都是无法POST成功。
3,表单截图和我在chrome中抓到POST的完整包如下,请求各位大师帮忙解答一下如何才能成功提交数据。
4,简单点问的话,就是,模拟下面这个POST的过程,我需要上传什么格式的数据,这个?要怎么构造~
wbdata=requests.posturl,data=?

Remote Address:xxx.xx.xxx.xxx:80
Request URL:http://xxx.xx.xxx.xxx/DocLibs…

**Request Method:POST
Status Code:200 OK**

Response Headers
view source
Cache-Control:private
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 17 Nov 2016 02:58:41 GMT
MicrosoftSharePointTeamServices:14.0.0.6117
Server:Microsoft-IIS/7.5
Set-Cookie:WSS_KeepSessionAuthenticated={1d44c43a-635d-42c2-b3a4-3b5818701b3c}; path=/
Set-Cookie:WSS_KeepSessionAuthenticated={1d44c43a-635d-42c2-b3a4-3b5818701b3c}; path=/
SPRequestGuid:ecc06d99-c940-4881-bd79-c128fe335437
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-AspNet-Version:2.0.50727
X-MS-InvokeApp:1; RequireReadOnly
X-Powered-By:ASP.NET
X-SharePointHealthScore:0
Cache-Control:private
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Thu, 17 Nov 2016 02:58:41 GMT
MicrosoftSharePointTeamServices:14.0.0.6117
Server:Microsoft-IIS/7.5
Set-Cookie:WSS_KeepSessionAuthenticated={1d44c43a-635d-42c2-b3a4-3b5818701b3c}; path=/
Set-Cookie:WSS_KeepSessionAuthenticated={1d44c43a-635d-42c2-b3a4-3b5818701b3c}; path=/
SPRequestGuid:ecc06d99-c940-4881-bd79-c128fe335437
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-AspNet-Version:2.0.50727
X-MS-InvokeApp:1; RequireReadOnly
X-Powered-By:ASP.NET
X-SharePointHealthScore:0

Request Headers
view source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:45252
Content-Type:application/x-www-form-urlencoded
Cookie:WSS_KeepSessionAuthenticated={1d44c43a-635d-42c2-b3a4-3b5818701b3c}
Host:xxx.xx.xxx.xxx
Origin:http://xxx.xx.xxx.xxx
Referer:http://xxx.xx.xxx.xxx/DocLibs…
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 Windows NT 6.1; WOW64 AppleWebKit/537.36 KHTML, like Gecko Chrome/46.0.2490.86 Safari/537.36
Query String Parameters
view source
view URL encoded
GroupId:8665
IsDlg:1

Form Data
view source
view URL encoded
MSOWebPartPage_PostbackSource:
MSOTlPn_SelectedWpId:
MSOTlPn_View:0
MSOTlPn_ShowSettings:False
MSOGallery_SelectedLibrary:
MSOGallery_FilterString:
MSOTlPn_Button:none
MSOSPWebPartManager_DisplayModeName:Browse
MSOSPWebPartManager_ExitingDesignMode:false
__EVENTTARGET:ctl00$PlaceHolderMain$ctl01$RptControls$btnOK
__EVENTARGUMENT:
MSOWebPartPage_Shared:
MSOLayout_LayoutChanges:
MSOLayout_InDesignMode:
MSOSPWebPartManager_OldDisplayModeName:Browse
MSOSPWebPartManager_StartWebPartEditingName:false
MSOSPWebPartManager_EndWebPartEditing:false
_maintainWorkspaceScrollPosition:0
__spPickerHasReturnValue:
__spPickerReturnValueHolder:
__REQUESTDIGEST:0xE3EB894AE6EAC2CA3D10CCF35F68CED435C09263CDA2FD36CB354531011D265E95A7882F340DCEEBEF07F3B716E793CCCCFBF2D13E03AF742511B8F08F4A40EC,17 Nov 2016 02:58:17 -0000
__VIEWSTATE:/wEPDwUKLTg0NzQwNzQ4MA9kFgJmD2QWAgIBDxYCHgVjbGFzcwUWbXMtZGlhbG9nIG1zLWRpYWxvZy1uchYCAgMPZBYKAhEPZBYEZg9kFgQCAQ9kFgJmD2QWBAICD2QWCgIBDxYCHgBQlJQlPigJNCU0Nkdinr4g9g1OaX4Gje2CQWCzZsMQg=
__VIEWSTATEGENERATOR:58E4804D
__EVENTVALIDATION:/wEWCwLn/sesAwK1s5fnCALty/+8DgLZu6yaDQL5pZOpCwLW6vL1CwKTv/WqAgLLtd3hBgLd0oKSCwLV3d/oDwKmp+GoBg5gA57lCqNaIc7OfJxZw78M2u51
ctl00$PlaceHolderMain$ctl00$ctl01$userPicker$hiddenSpanData: <span id=”spanAP1test” iscontenttype=”true” tabindex=”-1″ class=”ms-entity-resolved” contenteditable=”false” title=”AP1test”><div style=”display:none;” id=”divEntityData” key=”AP1test” displaytext=”Wang, test” isresolved=”True” description=”AP1test”><div data=”<ArrayOfDictionaryEntry xmlns:xsi=&quot;http://www.w3.org/2001/XMLSch… xmlns:xsd=&quot;http://www.w3.org/2001/XMLSch… xsi:type=&quot;xsd:string&quot;>SPUserID</Key><Value xsi:type=&quot;xsd:string&quot;>3967</Value></DictionaryEntry><DictionaryEntry><Key xsi:type=&quot;xsd:string&quot;>AccountName</Key><Value xsi:type=&quot;xsd:string&quot;>AP1test</Value></DictionaryEntry><DictionaryEntry><Key xsi:type=&quot;xsd:string&quot;>Email</Key><Value xsi:type=&quot;xsd:string&quot;>test.Wang@cn .ab-inbev.com</Value></DictionaryEntry><DictionaryEntry><Key xsi:type=&quot;xsd:string&quot;>Department</Key><Value xsi:type=&quot;xsd:string&quot;>Inforcell</Value></DictionaryEntry><DictionaryEntry><Key xsi:type=&quot;xsd:string&quot;>PrincipalType</Key><Value xsi:type=&quot;xsd:string&quot;>User</Value></DictionaryEntry><DictionaryEntry><Key xsi:type=&quot;xsd:string&quot;>Title</Key><Value xsi:type=&quot;xsd:string&quot;>Reporting Specialist</Value></DictionaryEntry></ArrayOfDictionaryEntry>”></div></div><span id=”content” tabindex=”-1″ contenteditable=”false” onmousedown=”onMouseDownRwevent;” oncontextmenu=”onContextMenuSpnRwevent,ctx;”>Wang, test</span></span>;
ctl00$PlaceHolderMain$ctl00$ctl01$userPicker$OriginalEntities:<Entities />
ctl00$PlaceHolderMain$ctl00$ctl01$userPicker$HiddenEntityKey:
ctl00$PlaceHolderMain$ctl00$ctl01$userPicker$HiddenEntityDisplayText:
ctl00$PlaceHolderMain$ctl00$ctl01$userPicker$downlevelTextBox: <span id=spanAP1test isContentType=true tabindex=-1 class=ms-entity-resolved contentEditable=false title=AP1test><div style=display:none; id=divEntityData key=AP1test displaytext=Wang, test isresolved=True description=AP1test><div data=&lt;ArrayOfDictionaryEntry xmlns:xsi=&quot;http://www.w3.org/2001/XMLSch… xmlns:xsd=&quot;http://www.w3.org/2001/XMLSch… xsi:type=&quot;xsd:string&quot;&gt;SPUserID&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;3967&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;DictionaryEntry&gt;&lt;Key xsi:type=&quot;xsd:string&quot;&gt;AccountName&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;AP1test&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;DictionaryEntry&gt;&lt;Key xsi:type=&quot;xsd:string&quot;&gt;Email&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;test.Wang@cn .ab-inbev.com&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;DictionaryEntry&gt;&lt;Key xsi:type=&quot;xsd:string&quot;&gt;Department&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;Inforcell&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;DictionaryEntry&gt;&lt;Key xsi:type=&quot;xsd:string&quot;&gt;PrincipalType&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;User&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;DictionaryEntry&gt;&lt;Key xsi:type=&quot;xsd:string&quot;&gt;Title&lt;/Key&gt;&lt;Value xsi:type=&quot;xsd:string&quot;&gt;Reporting Specialist&lt;/Value&gt;&lt;/DictionaryEntry&gt;&lt;/ArrayOfDictionaryEntry&gt;></div></div><span id=content tabindex=-1 contenteditable=false onmousedown=onMouseDownRwevent; onContextMenu=onContextMenuSpnRwevent,ctx; >Wang, test</span></span>;
__spText1:
__spText2:

(看完/读完)这篇文章有何感想! 优优娱乐的分享…

优优娱乐99uupython查询数据库最新数据

( 优优娱乐99uu )

请教如何实现python查询数据库最新一行更新 如果没更新不打印,

cur.executeSELECT id,`user`,`host` FROM `aaaa` ORDER BY `end_time` DESC LIMIT 0, 1
results = cur.fetchall

这样如果每s执行 写入文件 如果数据库没有新内容 就会重复取最后一行,想实现像log的功能 有更新报出来。没更新就不查了

肯定要查询一下才知道有没有更新啊,不然怎么知道呢??

嗯 后来定时每秒查 打印出来的时候检验重复实现了,谢谢

(看完/读完)这篇文章有何感想! 优优娱乐99uu的分享…