python mysql连接池

import pymysql
from dbutils.pooled_db import PooledDB

host = 'rds.aliyuncs.com'
port = 3306
user = 'ueser'
password = '123123'
database = 'gp_info'


class MySQLConnectionPool:
    def __init__(self,):
        self.pool = PooledDB(
            creator=pymysql,  # 使用链接数据库的模块
            mincached=10,  # 初始化时,链接池中至少创建的链接,0表示不创建
            maxconnections=200,  # 连接池允许的最大连接数,0和None表示不限制连接数
            blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
            host=host,
            port=port,
            user=user,
            password=password,
            database=database
        )

    def open(self):
        self.conn = self.pool.connection()
        self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)  # 表示读取的数据为字典类型
        return self.conn, self.cursor

    def close(self, cursor, conn):
        cursor.close()
        conn.close()

    """插入单条数据"""
    def insert_one(self, json_data, table_name):
        conn, cursor = self.open()
        sql = "REPLACE INTO `{0}` ({1}) VALUES ({2})".format(
            table_name,
            ', '.join(json_data.keys()),
            ', '.join(['%s'] * len(json_data))
        )
        try:
            cursor.execute(sql, tuple(json_data.values()))
            conn.commit()
        except Exception as err:
            print(err)
            return None
    # 批量插入
    def insert_all(self,json_data_list,table_name):
        json_data=json_data_list[0]
        conn, cursor = self.open()
        sql = "REPLACE INTO `{0}` ({1}) VALUES ({2})".format(
            table_name,
            ', '.join(json_data.keys()),
            ', '.join(['%s'] * len(json_data))
        )
        values = [(tuple(entry.values())) for entry in json_data_list]
        try:
            cursor.executemany(sql,values)
            conn.commit()
        except Exception as err:
            print(err)
            return None


    def select_one(self, sql, *args):
        """查询单条数据"""
        conn, cursor = self.open()
        cursor.execute(sql, args)
        result = cursor.fetchone()
        self.close(conn, cursor)
        return result

    def select_all(self, sql, args):
        """查询多条数据"""
        conn, cursor = self.open()
        cursor.execute(sql, args)
        result = cursor.fetchall()
        self.close(conn, cursor)
        return result
    
    # 查询数据
    def query_data(self,sql):
        """查询多条数据"""
        conn, cursor = self.open()
        cursor.execute(sql)
        result = cursor.fetchall()
        self.close(conn, cursor)
        return result

    def update_one(self, sql, args):
        """更新数据"""
        self.execute(sql, args, isNeed=True)

    def delete_one(self, sql, *args):
        """删除数据"""
        self.execute(sql, args, isNeed=True)

    def execute(self, sql, args, isNeed=False):
        """
        执行
        :param isNeed 是否需要回滚
        """
        conn, cursor = self.open()
        if isNeed:
            try:
                cursor.execute(sql, args)
                conn.commit()
            except:
                conn.rollback()
        else:
            cursor.execute(sql, args)
            conn.commit()
        self.close(conn, cursor)



mysql = MySQLConnectionPool()
query = "SELECT DISTINCT a.* FROM gp_info_list a LEFT JOIN gp_hszbl_fsjy_dn b ON a.dm = b.dm WHERE b.id IS NULL"
data=mysql.query_data(query)
print(data)
# data = [{
#     'id':111112,
#     'dm':"dm",
#     'mc':"mc",
#     "d": "d",
#     "o": "o",
#     "h": "h",
#     "l": "l",
#     "c": "c",
#     "v": "v",
#     "e": "e",
#     "zf":"zf",
#     "hs": "hs",
#     "zd": "zd",
#     "zde": "zde"
# }]
# mysql.insert_one(data[0],"gp_hszbl_fsjy_dn")
# sql_insert_one = "insert into `names` (`name`, sex, age) values (%s,%s,%s)"
# mysql.insert_one(sql_insert_one, ('唐三', '男', 25))

# datas = [
#     ('戴沐白', '男', 26),
#     ('奥斯卡', '男', 26),
#     ('唐三', '男', 25),
#     ('小舞', '女', 100000),
#     ('马红俊', '男', 23),
#     ('宁荣荣', '女', 22),
#     ('朱竹清', '女', 21),
# ]
# sql_insert_all = "insert into `names` (`name`, sex, age) values (%s,%s,%s)"
# mysql.insert_all(sql_insert_all, datas)

# sql_update_one = "update `names` set age=%s where `name`=%s"
# mysql.update_one(sql_update_one, (28, '唐三'))

# sql_delete_one = 'delete from `names` where `name`=%s '
# mysql.delete_one(sql_delete_one, ('唐三',))

# sql_select_one = 'select * from `names` where `name`=%s'
# results = mysql.select_one(sql_select_one, ('宁荣荣',))
# print(results)

# sql_select_all = 'select * from `names` where `name`=%s'
# results = mysql.select_all(sql_select_all, ('宁荣荣',))
# print(results)

请求调用股票Api

import concurrent.futures
import requests
from db_utils import mysql
# token='12343435435'
token='234233435345435'

# 根据股票找相关指数、行业、概念
def get_hszg_zg(dm):
    url='https://api.biyingapi.com/hszg/zg/'+dm+'/'+token
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return None
 #历史日交易   
def get_hszbl_fsjy_dn(dm):
    url='https://api.biyingapi.com/hszbl/fsjy/'+dm+'/dn/'+token
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        return None
    
# 实时交易数据接口
def get_hsrl_ssjy(dm):
    url='https://api.biyingapi.com/hsrl/ssjy/'+dm+'/'+token
    response = requests.get(url)
    if response.status_code == 200:
        return response.json()
    else:
        print('异常:='+dm)
        return None
    
data_list=[]
# 定义一个任务函数
def task(obj,gl):
    print("股票:",obj)
    dm=obj['dm']
    mc=obj['mc']
    data=get_hsrl_ssjy(dm)
    data['dm']=dm
    data['mc']=mc
    data['gl']=gl
    data_list.append(data)
             
 
def get_gl_info(gl):
    sql="SELECT DISTINCT a.* from gp_info_list a INNER JOIN gp_hszg_zg b on a.dm=b.dm where b.`name` like '%"+gl+"%' and a.dm not like '688%' and a.mc not like 'ST%' and a.mc not like '*ST%'"
    return sql
# 使用ThreadPoolExecutor执行任务 tasks 任务列表
def thread_task(tasks,gl):
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
        future_to_task = {executor.submit(task, obj,gl): obj for obj in tasks}
        concurrent.futures.wait(future_to_task)

if __name__ == "__main__":
    gl_list=["芯片","贵金属","电力","电网","航天"]
    for gl in gl_list:
        query=get_gl_info(gl)
        tasks = mysql.query_data(query)
        thread_task(tasks,gl)
      
    mysql.insert_all(data_list,'gp_hsrl_ssjy')

    print('====task ok=====')

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值