mysql & es 连接池

数据库的连接池建议放在类似settings.py的配置模块中,因为基本都是配置项,方便统一管理。

#settings.py

import os
from DBUtils.PooledDB import PooledDB
from elasticsearch import Elasticsearch
import pymysql
class Config(object):
    POOL = PooledDB(
        creator = pymysql,
        maxconnections = 20,
        mincached = 3,
        maxcached = 3,
        host = ‘10.208.116.41‘,
        port = 3306,
        user = ‘hadoop‘,
        password= ‘XXXXX‘,
        database = ‘hadoop_tools‘
    )
    #elasticsearch connect
    es_conn = Elasticsearch(
         [‘10.208.116.33‘, ‘10.208.116.34‘, ‘10.208.116.35‘],
         sniff_timeout=60,
         sniff_on_start=True
    )
    es_mapping = {
        ‘properties‘: {
            ‘title‘: {
                ‘type‘: ‘text‘,
                ‘analyzer‘: ‘ik_max_word‘,
                ‘search_analyzer‘: ‘ik_max_word‘
            }
        }
    }

#POOL test
if __name__ == ‘__main__‘:
    conn = Config.POOL.connection()
    #cur = conn.cursor(pymysql.cursors.DictCursor)
    cur = conn.cursor()
    cur.execute("select * from hs2_status")
    ret = cur.fetchall()
    for i in ret:
        print(i)

2)封装MySQL的操作

utils/helper.py

import pymysql
from ops.settings import Config
def connect():
    conn = Config.POOL.connection()
    cur = conn.cursor(pymysql.cursors.DictCursor)
    return conn,cur
def connect_close(conn,cur):
    conn.close()
    cur.close()

def fetch_all(sql,args):
    conn,cur = connect()
    cur.execute(sql,args)
    result = cur.fetchall()
    connect_close(conn,cur)
    return result

def fetch_one(sql,args):
    conn,cur = connect()
    cur.execute(sql,args)
    result = cur.fetchone()
    connect_close(conn,cur)
    return result

def insert(sql,args):
    conn, cur = connect()
    row = cur.execute(sql,args)
    conn.commit()
    connect_close(conn,cur)
    return row

def update(sql,args):
    conn, cur = connect()
    row = cur.execute(sql,args)
    conn.commit()
    connect_close(conn,cur)
    return row

def delete(sql,args):
    conn, cur = connect()
    row = cur.execute(sql,args)
    conn.commit()
    connect_close(conn,cur)
    return row
##下面这段调试用,可以去掉
if __name__ == ‘__main__‘:
    in_zk = ‘YES‘
    ip = ‘10.208.106.159‘
    # row = update("update hs2_status set in_zk=%s  where host_ip = %s",(in_zk,ip))
    # print("row is %s" %(row))

    # 获得表头
    # sql = "SHOW FIELDS FROM hs2_status"
    # tb_h = fetch_one(sql,())  # 执行sql
    # #hs2_header = [l[0] for l in tb_h]
    # # for i in tb_h:
    # print("this is %s" %(tb_h))
    #获取内容
    # hs2_content = fetch_all(sql, ())
    sql = "select * from hs2_status"
    hs2_content = fetch_all(sql,())
    for i in hs2_content:
        print(i)

ES连接引用示例:

#!/usr/bin/env python
# encoding: UTF-8
from ops.settings import Config

#create index,change mappings
Config.es_conn.indices.create(index=‘news‘, ignore=400)
Config.es_conn.indices.put_mapping(index=‘news‘, doc_type=‘politics‘, body=Config.es_mapping)

datas = [
    {
        ‘title‘: ‘美国留给伊拉克的是个烂摊子吗‘,
        ‘url‘: ‘http://view.news.qq.com/zt2011/usa_iraq/index.htm‘,
        ‘date‘: ‘2011-12-16‘
    },
    {
        ‘title‘: ‘公安部:各地校车将享最高路权‘,
        ‘url‘: ‘http://www.chinanews.com/gn/2011/12-16/3536077.shtml‘,
        ‘date‘: ‘2011-12-16‘
    },
    {
        ‘title‘: ‘中韩渔警冲突调查:韩警平均每天扣1艘中国渔船‘,
        ‘url‘: ‘https://news.qq.com/a/20111216/001044.htm‘,
        ‘date‘: ‘2011-12-17‘
    },
    {
        ‘title‘: ‘中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首‘,
        ‘url‘: ‘http://news.ifeng.com/world/detail_2011_12/16/11372558_0.shtml‘,
        ‘date‘: ‘2011-12-18‘
    }
]

#insert data
for data in datas:
    Config.es_conn.index(index=‘news‘, doc_type=‘politics‘, body=data)

#query data
result = Config.es_conn.search(index=‘news‘)
print(result)

  

原文地址:https://www.cnblogs.com/cwind/p/12208344.html

时间: 2024-10-08 18:21:38

mysql & es 连接池的相关文章

Node.js使用MySQL的连接池

使用Nodejs+MySQL肯定比PHP和MySQL的组合更适合做服务器端的开发. 使用Nodejs你会从他的异步行为中获益良多.比如,提升性能,你无须在从已有的MySQL数据库迁移到其他的NoSQL数据库获得性能的提升.   Nodejs如何使用MySQL Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现.比如,我们这里使用“node-mysql”连接数据库.我们使用下面的方式来连接数据库: 首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动.命令

Node.js如何使用MySQL的连接池实例

http://www.111cn.net/database/mysql/90774.htm Nodejs如何使用MySQL Nodejs要连接MySQL,可以使用Nodejs的MysQL驱动来实现.比如,我们这里使用"node-mysql"连接数据库.我们使用下面的方式来连接数据库: 首先,我们需要使用nodejs的包管理工具(npm)安装mysql的驱动.命令行如下: npm install musql 现在,要在js文件中使用mysql,添加下面的代码到你的文件中: var mys

MySql & JDBC & 连接池 & 总结

连接池:解决资源浪费,提高代码性能. 本小节目标: 使用DBCP,C3P0连接池完成基本数据库的操作. 使用DBUtils完成CRUD的操作. 数据库连接池的解决方案是: 当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池.每次应用程序请求数据库连接时,无须重新打开连接,而是从连接池中取出已有的连接使用,使用完后不再关闭数据库连接,而是直接将连接归还给连接池.通过使用连接池,将大大提高程序的运行效率. 数据库连接池是Connection 对象的工程.数据库连接池的常用参数

nodejs mysql 创建连接池

用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 程序员

Tomcat 下 mysql的连接池配置和使用

最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习. 先把我自己的方法写出来,再说下网上其他的没有成功的方法. 1.首先当然是先把mysql的jar包放在lib目录下,toncat的或者自己项目的lib下都可以. 2.在tomcat的conf目录下的server.xml里添加如下内容,要添加在 <Host></Host>之间 <Context path="/myexample" docBase="myexample&quo

Python下Mysql数据连接池——单例

# coding:utf-8 import threading import pymysql from DBUtils.PooledDB import PooledDB from app.common.file_config import get_config class DbPool(object): _instance_lock = threading.Lock() def __init__(self): if not hasattr(DbPool, "pool"): DbPool

用swoole实现mysql的连接池--摘自https://github.com/153734009/doc/blob/master/php/mysql_pool.php

<?php   $serv = new swoole_server("0.0.0.0", 9508);   $serv->set(['worker_num'=>1, 'task_worker_num'=>5]);   function onReceive($serv, $fd, $from_id, $data)   {   $sql = $data;   $result = $serv->taskwait($sql);   if($result !== f

如何配置mysql JNDI连接池

一.在tomcat conf目录下的context.xml文件里的Context标签下添加如下配置<Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"maxActive="100" maxIdle="30" maxWait="10000" username="root"pa

node集成mysql——pool连接池

安装 mysql npm install mysql or cnpm install mysql 创建db.js,实现mysql操作模块 var mysql = require('mysql'); var db = {}; var pool = mysql.createPool({ host: 'localhost', port: 3306, user: 'root', password: 'root', database: 'demo' }); var exec = function (sql