首页 > 科技 >

30行代码构建Python数据库连接池,并把SQL查询数据转化为df

2019-07-25 04:44:56 暂无 阅读:640 评论:0

在数据剖析师实际的工作过程中,取数和数据处理占有了很大一部门工作量,取数一样是从各个数据库提取,数据处理一样是使用pandas,好在pandas供应了保持数据库的接口,然则,频仍的保持和封闭数据库很影响数据库的机能,导致查询过慢。为此,我测验构建数据库保持池,每次保持数据库只需要从保持池中掏出一条保持,用完之后再放归去,并不是真正的保持数据库和封闭数据库。同时,我也测验把取数过程封装成方式,供直接挪用,下面所有代码拿到你的机械上都能够直接运行:

30行代码构建Python数据库连接池,并把SQL查询数据转化为df

第一步、建立设置文件 config.pytest_mysql = {

'host': '127.0.0.1',

'port': 3306,

'user': 'root',

'pass_word': 'root',

'db': 'wangzhe'

}

这里面首要存储数据库设置信息;第二步、使用pymysql构建数据库保持池 dbpools.pyimport pymysql

from DBUtils.PooledDB import PooledDB

class OPMysql(object):

__pool = None

def __init__(self):

pass

def get_mysqlconn(self, host, user, pass_word, port, db):

\"\"\"

构建数据库保持池

:return: 数据库保持

\"\"\"

if OPMysql.__pool is None:

__pool = PooledDB(creator=pymysql, mincached=1, maxcached=20,

host=host,

user=user,

passwd=pass_word,

db=db,

port=port,

charset='utf8')

print(__pool)

return __pool.connection()

def dispose(self):

self.cur.close()

self.coon.close()

30行代码构建Python数据库连接池,并把SQL查询数据转化为df

第三步、构建数据获取文件 mysqlhelp.pyimport sys

import os

import pandas as pd

from config import config

from utils.dbpools import OPMysql

DB = config.test_mysql

host = DB['host']

port = DB['port']

user = DB['user']

pass_word = DB['pass_word']

db = DB['db']

class MysqlHelp(object):

def __init__(self, host=host, port=port, user=user, pass_word=pass_word, db=db, charset=\"utf8\", read_timeout=7200):

self.host = host

self.port = port

self.user = user

self.pass_word = pass_word

self.db = db

self.charset = charset

self.read_timeout = read_timeout

self.db_instance = OPMysql()

def get_conn(self):

conn = self.db_instance.get_mysqlconn(host=self.host, user=self.user, pass_word=self.pass_word, port=self.port,

db=self.db)

return conn

def close_conn(self, conn, cursor=None):

if cursor is not None:

cursor.close()

conn.close()

print('数据库封闭')

def get_df(self, *args):

dfs = []

conn = self.get_conn()

for i, sql in enumerate(args):

df = pd.read_sql(sql, conn)

dfs.append(df)

self.close_conn(conn)

return dfs if len(dfs) > 1 else dfs[0]

实例

接着我们来使用一下看看,保持内陆数据库,获取hero表中的数据,并转换为dataframefrom utils.mysqlhelp import MysqlHelp

from config import config

mysql_help = MysqlHelp(**config.test_mysql)

sql = '''

select * from heros

'''

df = mysql_help.get_df(sql)

print(df.head())

30行代码构建Python数据库连接池,并把SQL查询数据转化为df

能够看到,数据输出成功,今后想要获取数据库中的数据,写完sql直接挪用写好的方式就能够了,后背还能够把获取到的数据主动作为邮件附件发送,我们下次再说,敬请等候!

相关文章