Todos os produtos
Search
Central de documentação

Lindorm:Use DBUtils para desenvolver aplicações

Última atualização: Jun 28, 2026

Gerenciar conexões com o banco de dados em produção exige um pool de conexões. O DBUtils oferece um pool de conexões Python compatível com phoenixdb para conexão ao LindormTable, permitindo controlar a reutilização de conexões, limites de ociosidade e comportamento de bloqueio sem escrever a lógica do pool manualmente.

Pré-requisitos

Antes de começar, verifique se você tem:

Instale dependências

Instale o phoenixdb e o DBUtils:

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

Conectar ao LindormTable usando um pool de conexões

O exemplo a seguir cria um pool de conexões PooledDB e demonstra operações de upsert e consulta no 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. Defina url como o endereço HTTP do endpoint SQL do LindormTable. Remova o prefixo jdbc:lindorm:table:url=. Por exemplo, se o console exibir jdbc:lindorm:table:url=http://ld-bp1p7e07ohamf****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060, defina url como http://ld-bp1p7e07ohamf****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060. Para localizar o endpoint, consulte Visualize os endpoints do LindormTable.

  2. Configure user e password com as credenciais do LindormTable. Essas informações estão disponíveis no sistema de gerenciamento de cluster do LindormTable.

  3. Especifique em database o nome do banco de dados desejado para a conexão.

Parâmetros do pool de conexões

Ajuste maxcached e maxconnections conforme sua carga de trabalho.

Parâmetro

Descrição

Valor no exemplo

maxcached

Quantidade máxima de conexões ociosas mantidas no pool

10

maxconnections

Total máximo de conexões que o pool pode abrir

50

blocking

Define se o cliente aguarda quando não há conexão ociosa disponível. True indica que o cliente espera; False faz a chamada falhar imediatamente

True

ping

Verifica a conectividade com o servidor ao recuperar uma conexão do pool. Consulte Limitações para restrições deste parâmetro

1

autocommit

Ativa o modo de confirmação automática em cada conexão

True

Limitações

  • **O parâmetro ping não se aplica a conexões phoenixdb.** Embora seja possível executar o comando ping para testar a conectividade de conexões estabelecidas pelo DBUtils, esse método não funciona para conexões criadas via phoenixdb.

  • **Conexões ociosas por mais de 10 minutos geram o erro NoSuchConnection.** Caso uma conexão fique inativa por mais de 10 minutos, chame _connect() para obter uma nova conexão do pool.

Próximos passos