Todos los productos
Search
Centro de documentos

Lindorm:Uso de DBUtils para desarrollar aplicaciones

Última actualización: Sep 05, 2026

Para gestionar las conexiones a bases de datos de manera eficiente en entornos de producción, se requiere un pool de conexiones. DBUtils proporciona un pool de conexiones en Python compatible con phoenixdb para conectarse a LindormTable. Esta herramienta le permite controlar la reutilización de conexiones, los límites de inactividad y el comportamiento de bloqueo sin necesidad de implementar su propia lógica de pool.

Requisitos previos

Antes de empezar, asegúrese de cumplir con lo a continuación:

Instalación de dependencias

Instale phoenixdb y DBUtils:

pip install phoenixdb==1.2.0
pip install DBUtils==3.0.2

Conexión a LindormTable mediante un pool de conexiones

El siguiente ejemplo crea un pool de conexiones PooledDB y muestra operaciones de upsert y consulta en LindormTable.

#!/usr/bin/python3

from dbutils.pooled_db import PooledDB
import importlib

class DBUtilsDemo:

    def __init__(self, url, user, password, database):
        config = {
            'url': url,
            'lindorm_user': user,
            'lindorm_password': password,
            'database': database,
            'autocommit': True
        }
        db_creator = importlib.import_module("phoenixdb")
        # Create a connection pool based on DBUtils.
        self.pooled = PooledDB(db_creator,
                               maxcached=10,
                               maxconnections=50,
                               blocking=True,
                               ping=1,
                               **config)

    # Obtain a connection from the connection pool.
    def _connect(self):
        try:
            r = self.pooled.connection()
            return r
        except Exception as e:
            print("Failed to connect:" + str(e))

    # Return a connection to the connection pool.
    def _close(self, conn, stmt):
        if stmt:
            stmt.close()
        if conn:
            conn.close()

    # Query a single row of data.
    def select_row(self, sql):
        connection = self._connect()
        statement = None
        try:
            statement = connection.cursor()
            statement.execute(sql)
            row = statement.fetchone()
            return row
        except Exception as e:
            print(e)
        finally:
            self._close(connection, statement)

    # Query multiple rows of data.
    def select_rows(self, sql):
        connection = self._connect()
        statement = None
        try:
            statement = connection.cursor()
            print(sql)
            statement.execute(sql)
            rows = statement.fetchall()
            return rows
        except Exception as e:
            print(e)
        finally:
            self._close(connection, statement)

    # Update and insert data to a table.
    def upsert_data(self, sql_upsert):
        connection = self._connect()
        statement = None
        try:
            statement = connection.cursor()
            statement.execute(sql_upsert)
            connection.commit()
        except Exception as e:
            print(e)
        finally:
            self._close(connection, statement)

    # Update and insert data to a table by specifying parameters.
    def upsert_data_prams(self, sql_upsert, prams):
        connection = self._connect()
        statement = None
        try:
            statement = connection.cursor()
            statement.execute(sql_upsert, prams)
            connection.commit()
        except Exception as e:
            print(e)
        finally:
            self._close(connection, statement)

if __name__ == '__main__':
    url = 'http://ld-bp1p7e07ohamf****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060'
    user = 'root'
    password = 'root'
    database = 'test'

    poolUtils = DBUtilsDemo(url, user, password, database)
    poolUtils.upsert_data("upsert into tb(id,name,address) values ('i001','n001','a001')")

    params = ['i002', 'n002', 'a002']
    poolUtils.upsert_data_prams("upsert into tb(id,name,address) values (?,?,?)", params)

    rows = poolUtils.select_rows("select * from tb")
    print(rows)

    row = poolUtils.select_row("select * from tb limit 1")
    print(row)

    row = poolUtils.select_row("select * from tb where id = 'i001' limit 1")
    print(row)

Notas de uso:

  1. Establezca url con la dirección HTTP del endpoint SQL de LindormTable. Elimine el prefijo jdbc:lindorm:table:url=. Por ejemplo, si la consola muestra jdbc:lindorm:table:url=http://ld-bp1p7e07ohamf****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060, configure url como http://ld-bp1p7e07ohamf****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060. Para localizar el endpoint, consulte View the endpoints of LindormTable.

  2. Configure user y password con las credenciales de LindormTable. Puede encontrarlas en el sistema de gestión de clústeres de LindormTable.

  3. Defina database con el nombre de la base de datos a la que desea conectarse.

Parámetros del pool de conexiones

Ajuste maxcached y maxconnections según su carga de trabajo.

Parámetro

Descripción

Valor en el ejemplo

maxcached

Número máximo de conexiones inactivas que se mantienen en el pool

10

maxconnections

Número total máximo de conexiones que puede abrir el pool

50

blocking

Determina si el cliente espera cuando no hay ninguna conexión inactiva disponible. True indica que el cliente espera; False provoca que la llamada falle de inmediato

True

ping

Comprueba la conectividad con el servidor al obtener una conexión del pool. Consulte Límites para conocer las restricciones de este parámetro

1

autocommit

Habilita el modo de confirmación automática en cada conexión

True

Límites

  • **ping no aplica a las conexiones de phoenixdb.** Es posible ejecutar el comando ping para probar la conectividad de las conexiones establecidas por DBUtils, pero este método no es válido para las conexiones establecidas mediante phoenixdb.

  • **Las conexiones inactivas por más de 10 minutos generan el error NoSuchConnection.** Si una conexión no se ha utilizado durante más de 10 minutos, llame a _connect() para obtener una nueva conexión del pool.

Pasos siguientes