python访问mysql

复制代码
# -*- coding: UTF-8 -*-
import time

import phoenixdb
import psycopg2
import pymysql
from urllib.parse import urlparse

"""
将数据库的连接信息组装成一个connection对象
"""


class Connection(object):
    def __init__(self, conn_type, host, port, schema, username, password):
        self.host = host
        self.port = port
        self.conn_type = conn_type
        self.schema = schema
        self.username = username
        self.password = password

    # 从jdbc_url构造connection
    @classmethod
    def create(cls, url: str, username=None, password=None):
        result = urlparse(url[5:]) if url.startswith('jdbc:') else urlparse(url)
        conn_dict = {'host': result.hostname,
                     'port': result.port,
                     'conn_type': result.scheme,
                     'schema': result.path[1:],
                     'username': username,
                     'password': password}
        return cls(**conn_dict)

    def __str__(self):
        return self.__dict__

    def __repr__(self):
        return str(self.__str__())

    @property
    def jdbc_url(self):
        return "jdbc:{conn_type}://{host}:{port}/{schema}?useCompression=true&socketTimeout=1200000".format(
            **self.__dict__)


# 连接数据库和数仓
class DbConnCursor(object):

    def __init__(self, conn_type, host, port, schema, username, password):
        if conn_type.upper() == 'MYSQL':
            self.conn = pymysql.connect(host=host,port=port,user=username,password=password,database=schema,connect_timeout=31536000)
                    
        elif conn_type.upper() == 'POSTGRESQL':
            self.conn = psycopg2.connect(host=host, port=port, user=username, password=password, database=schema)
        elif conn_type.upper() == 'HBASE':
            self.conn = phoenixdb.connect("http://{host}:{port}".format(host=host, port=port), autocommit=True)
        
        self.cur = self.conn.cursor()

    # 通过传入一个conn对象构造db_cursor
    @classmethod
    def create(cls, conn: Connection):
        return cls(**conn.__dict__)

    def __enter__(self):
        return self.cur

    def __exit__(self, exc_type, exc_value, exc_trace):
        self.conn.commit()
        self.cur.close()
        self.conn.close()
复制代码

 

posted @   Mars.wang  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示