MySQL&ES连接池

摘要:
建议将数据库的连接池放置在类似于settings.py的配置模块中。因为它基本上是一个配置项,所以便于统一管理。1) 连接池类#设置。pyimportosfromDBUtils PooledDBimportPooledDBfromselasticsearchimportElasticearchimportpymysqlclassConfig(对象):POOL=PooledDB(创建者=

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

1) 连接池类#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)

3)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)

  

免责声明:文章转载自《MySQL&ES连接池》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HBase学习笔记(四)—— 架构模型php word转html(可能样式会有问题 还没有空细究)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django2.2使用mysql数据库pymysql版本不匹配问题的解决过程与总结

前置条件 django版本:2.2.1 python版本:3.6.6 mysql版本:mysql-community8.0.15 问题 在搭建django项目,配置mysql数据库时遇到无法迁移数据库的问题,错误信息如下图: 问题分析过程 由错误信息,可大致看出是一个叫mysqlclient的包版本不匹配导致的问题。 搜索引擎检索相关错误,得知:pyth...

操作笔记:linux下安装mysql

1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev mysql-connector-odbc-5.2.5-6.el7.x86_64) [root@iZ945sgm0ugZ ~]# rpm -qa|grep -...

解决Firefox显示“已阻止载入混合活动内容”的方法

解决方法如下: 方法1:让Firefox暂时不阻止 打开新标签页,在地址栏输入 about:config,进入配置页面。 搜索 security.mixed_content.block_active_content,将true改为false。 方法2:避免在HTTPS页面中包含HTTP的内容。 第1种方法很不现实,因为我们不能要求所有用户去改这项配置。...

MYSQL使用指南DOS下操作

一、          连接MYSQL。 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的...

MyBatis基础总结

1.1什么是MyBatis MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架, 它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射, 用以将接口和Java的POJO(Plain Old Java Object,普通Java对象)映射成数据库中的记录,使得...

了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密

http://blog.csdn.net/Atwind/article/details/1832844 关系型数据库,如SQL Server,使用锁来避免多用户修改数据时的并发冲突。当一组数据被某个用户锁定时,除非第一个用户结束修改并释放锁,否则其他用户就无法修改该组数据。 有些数据库,包括SQL Server,用锁来避免用户检索未递交的修改记录。在这...