python操作数据库之批量导入

python操作数据库之批量导入


Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中[3] 有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。

批量从mongodb导入数据到redis
  • 结构图如下
python->mongodb:python取出mongodb数据
mongodb->redis:mongodb数据经过处理后保存到redis
  • python代码如下:
# -*- coding: utf-8 -*-
import redis
import pymongo
import logging
class savequestionmafengwo(object):
    def __init__(self):
        logging.basicConfig(filename = "./save-mafengwo-question.log", level = logging.DEBUG)
        self.redis_pool_conn=self.redis_pool()
        self.redis_db=self.connection_redis_db();
        self.mongo_db=self.connection_mongo_db();
        self.url='http://www.mafengwo.cn/wenda/detail-';
        self.hz='.html';
    def redis_pool(self):
        pool_redis=redis.ConnectionPool(host='IP',port=PORT,db=DB,password=PASS);
        return pool_redis;
    def connection_redis_db(self):
        pool=self.redis_pool_conn;
        redis_db = redis.Redis(connection_pool=pool)
        return redis_db;
    def get_data(self,start):
        mongo=self.mongo_db
        qas=mongo.find({"source":"mafengwo","type":"question"},{"qid":1}).skip(start).limit(40000);
        return qas;
    def put_data(self,start):
        qas=self.get_data(start);
        i=start
        for qa in qas:
            try:
                urlF = self.url + str(qa['qid']) + self.hz;
                self.redis_set_value(urlF);
                logging.debug(str(i) + "------" + urlF)
                i = i + 1
            except:
                logging.debug("error:" + str(qa['_id']))
                raise
    def connection_mongo_db(self):
        client = pymongo.MongoClient("IP", PORT)
        mydb = client.hello # new a database
        mydb.authenticate('USER', 'PASS') # check auth
        muser = mydb.QA# new a table
        return muser;
    def redis_set_value(self,urlF):
        db =self.redis_db
        db.set(urlF,"1");

if __name__ == '__main__':
    savequestionmafengwo=savequestionmafengwo();
    start={0,40000}
    for st in start:
        savequestionmafengwo.put_data(start)

posted on 2017-04-03 10:12  竟少  阅读(5420)  评论(0编辑  收藏  举报

导航