TDengine--连接脚本(python版)

django配置

TD_DATABASES = {
    "default": {
        "HOST": "62.234.221.57",
        "PORT": 6030,
        "USER": "vansing",
        "PASSWORD": "vansing2022",
        "DATABASE": "power",
        "DB_API": taos,
        "CHARSET": "UTF-8",
        "MIN_CACHED": 1,  # 连接池最小的空连接数量
        "MAX_CACHED": 5,  # 连接池最大可用连接数量
        "MAX_SHARED": 5,  # 连接池最大可共享连接数量
        "MAX_CONNECTIONS": 10,  # 最大允许连接数量
        "BLOCKING": False,  # 达到最大数量时是否阻塞
        "MAX_USAGE": 10,  # 单个连接最大复用次数
        "SET_SESSION ": ["query"],  # 用于传递到数据库的准备会话,如 [”set name UTF-8″]
    }
}

单点连接

import taos
from taosrest import connect
from baler import settings


class TDEngineClent(object):
    def __init__(self, client_type):
        self.client_type = client_type

    def __enter__(self):
        """
        :param client_type:
        """
        self.conn = self.__get_conn()
        self.cursor = self.conn.cursor()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.conn.close()
        self.cursor.close()

    def __get_conn(self):
        if self.client_type == 1:
            return taos.connect(
                host=settings.TD_DATABASES.get("default").get("HOST"),
                port=settings.TD_DATABASES.get("default").get("PORT"),
                user=settings.TD_DATABASES.get("default").get("USER"),
                password=settings.TD_DATABASES.get("default").get("PASSWORD"),
                database=settings.TD_DATABASES.get("default").get("DATABASE"),
                timezone="Asia/Shanghai"
            )
        elif self.client_type == 2:
            return connect(url="http://62.234.221.57:6030",
                           user="vansing",
                           password="vansing2022",
                           timeout=30)
        else:
            return None


cu_td_client = TDEngineClent(1)
# cu_td_rest_client = TDEngineClent(2)

连接池

import taos
from dbutils.persistent_db import PersistentDB
from taosrest import connect
from baler import settings


# 单例模式函数,用来修饰类
def singleton(cls, *args, **kw):
    instances = {}

    def _singleton():
        if cls not in instances:
            instances[cls] = cls(*args, **kw)
        return instances[cls]

    return _singleton


class TDEnginePoolClent(object):
    __pool = None

    def __init__(self, client_type):
        self.client_type = client_type

    def __enter__(self):
        self.conn = self.__getconn()
        self.cursor = self.conn.cursor()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cursor.close()
        self.conn.close()

    # 创建数据库连接池
    def __getconn(self):
        if self.__pool is None:
            if self.client_type == 1:
                self.__pool = PersistentDB(
                    creator=settings.TD_DATABASES.get("default").get("DB_API"),
                    mincached=settings.TD_DATABASES.get("default").get("MIN_CACHED"),
                    maxcached=settings.TD_DATABASES.get("default").get("MAX_CACHED"),
                    maxshared=settings.TD_DATABASES.get("default").get("MAX_SHARED"),
                    maxconnections=settings.TD_DATABASES.get("default").get("MAX_CONNECTIONS"),
                    blocking=settings.TD_DATABASES.get("default").get("BLOCKING"),
                    maxusage=settings.TD_DATABASES.get("default").get("MAX_USAGE"),
                    setsession=settings.TD_DATABASES.get("default").get("SET_SESSION"),
                    host=settings.TD_DATABASES.get("default").get("HOST"),
                    port=settings.TD_DATABASES.get("default").get("PORT"),
                    user=settings.TD_DATABASES.get("default").get("USER"),
                    password=settings.TD_DATABASES.get("default").get("PASSWORD"),
                    database=settings.TD_DATABASES.get("default").get("DATABASE"),
                    db=settings.TD_DATABASES.get("default").get("DATABASE"),
                    use_unicode=False,
                    charset=settings.TD_DATABASES.get("default").get("DB_API")
                )
        return self.__pool.connection()

    def getconn(self):
        conn = self.__getconn()
        cursor = conn.cursor()
        return cursor, conn

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


# 获取连接池,实例化
# @singleton
# def get_my_connection(client_type):
#     return TDEnginePoolClent(client_type)


td_client = TDEnginePoolClent(1)
# td_rest_client = TDEnginePoolClent(2)

基本使用

from utils.pool_tdb import td_client
from django.http import JsonResponse
from utils.TDClient import cu_td_client

def ceshi(request):
    with td_client:
        cursor, conn = td_client.getconn()
        result = cursor.execute("select * from d1001 limit 10")
    return JsonResponse({"123": "123"})

def ceshi2(request):
    with cu_td_client:
        result = cu_td_client.conn.query("select * from d1001 limit 10")
        data = result.fetch_all()
        for i in data:
            print(i)
    return JsonResponse({"123": "123"})

posted @ 2023-09-01 10:29  河图s  阅读(451)  评论(0)    收藏  举报