python

django重写model的save方法实现同时写2个数据库

Roy
最近有个需求就是当执行save时需要把数据写入2个数据库,查看文档后发现直接重写save方法比较简单。 首先建立2个测试数据库testa和testb,然后在settings中配置数据库: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'testa', 'USER': 'root', 'PASSWORD': 'asdasd', 'HOST': '192.

python+selenium+phantomjs抓取ajax动态页面

Roy
一般情况下,python爬虫遇到ajax动态页面一般都是直接分析后模拟ajax请求获得数据。不过今天遇到个网站,由于某些原因不透露网址了,点击搜索按钮后,它先跳转到a页面,然后从a页面跳转到b页面,再由b页面跳回a页面。当完成这2次跳转后,ajax向a页面提交的请求才会返回结果。 也怀疑是不是cookie或者refenen的问题,但最终证实不是因为这个。即便伪造了请求头再访问a页面,返回的也不是真实的结果页面而是一段跳转到b页面的js代码。 既然不知道跳转过程中网站到底干了写什么,那就直接上大杀器吧。 phantomjs可以简单的理解为js解释器,selenium更不用多介绍了,用pip安装即可。 从 http://phantomjs.org/download.html 下载编译后的包(当然你可以自己下源码),解压后的bin目录中就是我们需要的东西。 import sys reload(sys) sys.

python中and-or小技巧

Roy
首先,python中逻辑运算从左到右进行,and运算返回第一个假值,若都为真则返回最后一个真值。or运算返回第一个真值,若都为假则返回最后一个假值。 其次,python中0,(),[],{},None,空字符串都是假。 下面用简单的例子说明一下: def f(): print "in f" return False def t(): print "in t" return True def n(): print "in n" In [105]: r = t() and f() or n() in t in f in n In [106]: r In [107]: r = t() and n() or f() in t in n in f In [108]: r Out[108]: False In [111]: r = f() and n() or t() in f in t In [112]: r Out[112]: True 上面我们定义了3个函数,没返回值的情况下函数会默认返回None。这里有个地方需要注意,虽然函数可以返回true、false、none,但函数本身都是为真的,比如:

postgresql学习记录3

Roy
某些情况下需要向数据库中插入媒体文件,mysql中插入媒体文件时,数据字段应该是blob。而对于postgresql,则是bytea。这里注意的是打开文件时候应该用"rb wb"这种模式,示例如下: import psycopg2 #省略部分代码... def ins_pictures(self, name, position, explain, href, uploaddate, img, show_id): '''向pictures表中插入数据(显示位置,说明,上传时间,图片的2进制) ''' strs = r"insert into pictures(p_name,p_position,p_explain,p_href,p_uploaddate,p_show,p_img,show_id) values (%(name)s,%(position)s,%(explain)s,%(href)s,%(uploaddate)s,'0',%(img)s,%(show_id)s)" self.

虚拟环境pycurl的import错误

Roy
今天需要在虚拟环境下使用pycurl,使用pip安装时候没问题,不过再代码中import后则报错: ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other) 解决方法: