Metadata-Version: 2.4
Name: lesscode-database
Version: 0.0.14
Summary: Enterprise-grade database connection toolkit supporting MySQL, PostgreSQL, ClickHouse, MongoDB, Redis, Elasticsearch, Neo4j, and more
Author-email: navysummer <navysummer@yeah.net>
License: MIT License
        
        Copyright (c) [year] [fullname]
        
        Permission is hereby granted...
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.7
Provides-Extra: all
Requires-Dist: agraph>=7.0.0; extra == 'all'
Requires-Dist: aiomysql>=0.2.0; extra == 'all'
Requires-Dist: aiopg>=1.4.0; extra == 'all'
Requires-Dist: aioredis>=2.0.0; extra == 'all'
Requires-Dist: aiosqlite3>=0.18.0; extra == 'all'
Requires-Dist: asynch>=0.2.0; extra == 'all'
Requires-Dist: boto3>=1.26.0; extra == 'all'
Requires-Dist: cassandra-driver>=3.25.0; extra == 'all'
Requires-Dist: chromadb>=0.4.0; extra == 'all'
Requires-Dist: clickhouse-driver>=0.2.0; extra == 'all'
Requires-Dist: couchdb>=1.0.0; extra == 'all'
Requires-Dist: databricks-sql-connector>=0.10.0; extra == 'all'
Requires-Dist: dbutils>=3.0.0; extra == 'all'
Requires-Dist: deeplake>=3.8.0; extra == 'all'
Requires-Dist: dingodb>=0.1.0; extra == 'all'
Requires-Dist: duckdb>=0.8.0; extra == 'all'
Requires-Dist: elasticsearch>=8.0.0; extra == 'all'
Requires-Dist: etcd3>=0.12.0; extra == 'all'
Requires-Dist: fauna>=1.0.0; extra == 'all'
Requires-Dist: fdb>=2.0.0; extra == 'all'
Requires-Dist: google-cloud-bigquery>=3.0.0; extra == 'all'
Requires-Dist: google-cloud-firestore>=2.0.0; extra == 'all'
Requires-Dist: gremlinpython>=3.5.0; extra == 'all'
Requires-Dist: hdbcli>=2.10.0; extra == 'all'
Requires-Dist: httpx>=0.24.0; extra == 'all'
Requires-Dist: ibm-db>=3.0.0; extra == 'all'
Requires-Dist: influxdb-client>=1.30.0; extra == 'all'
Requires-Dist: influxdb>=5.3.0; extra == 'all'
Requires-Dist: ksycopg2>=2.9.0; extra == 'all'
Requires-Dist: kylinpython>=1.0.0; extra == 'all'
Requires-Dist: lancedb>=0.2.0; extra == 'all'
Requires-Dist: motor>=3.0.0; extra == 'all'
Requires-Dist: nebula3-python>=3.0.0; extra == 'all'
Requires-Dist: neo4j>=5.0.0; extra == 'all'
Requires-Dist: opensearch-py>=2.0.0; extra == 'all'
Requires-Dist: pinotdb>=0.4.0; extra == 'all'
Requires-Dist: prometheus-api-client>=0.5.0; extra == 'all'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'all'
Requires-Dist: pydgraph>=23.0.0; extra == 'all'
Requires-Dist: pydruid>=0.6.0; extra == 'all'
Requires-Dist: pymemcache>=4.0.0; extra == 'all'
Requires-Dist: pymongo>=4.0.0; extra == 'all'
Requires-Dist: pymssql>=2.2.0; extra == 'all'
Requires-Dist: pymysql>=1.0.0; extra == 'all'
Requires-Dist: pyodbc>=5.0.0; extra == 'all'
Requires-Dist: pyodps>=0.11.0; extra == 'all'
Requires-Dist: pyorient>=1.6.0; extra == 'all'
Requires-Dist: python-arango>=7.0.0; extra == 'all'
Requires-Dist: pytigergraph>=0.7.0; extra == 'all'
Requires-Dist: redis>=4.5.0; extra == 'all'
Requires-Dist: snowflake-connector-python>=3.0.0; extra == 'all'
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'all'
Requires-Dist: sqlalchemy>=2.0.0; extra == 'all'
Requires-Dist: surrealdb>=0.3.0; extra == 'all'
Requires-Dist: taos-ws-py>=1.0.0; extra == 'all'
Requires-Dist: taospy>=3.0.0; extra == 'all'
Requires-Dist: tcvectordb>=1.0.0; extra == 'all'
Requires-Dist: teradatasql>=20.0.0; extra == 'all'
Requires-Dist: ultipa>=2.0.0; extra == 'all'
Requires-Dist: vertica-python>=1.0.0; extra == 'all'
Requires-Dist: vespa>=0.5.0; extra == 'all'
Requires-Dist: volcengine>=1.0.0; extra == 'all'
Provides-Extra: allegrograph
Requires-Dist: agraph>=7.0.0; extra == 'allegrograph'
Provides-Extra: analyticdb
Requires-Dist: aiomysql>=0.2.0; extra == 'analyticdb'
Requires-Dist: pymysql>=1.0.0; extra == 'analyticdb'
Provides-Extra: antdb
Requires-Dist: dbutils>=3.0.0; extra == 'antdb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'antdb'
Provides-Extra: arangodb
Requires-Dist: python-arango>=7.0.0; extra == 'arangodb'
Provides-Extra: arcvector
Requires-Dist: requests>=2.28.0; extra == 'arcvector'
Provides-Extra: argodb
Requires-Dist: jaydebeapi>=1.2.0; extra == 'argodb'
Provides-Extra: azure-synapse
Requires-Dist: pyodbc>=5.0.0; extra == 'azure-synapse'
Provides-Extra: baidu-vectordb
Requires-Dist: requests>=2.28.0; extra == 'baidu-vectordb'
Provides-Extra: bigquery
Requires-Dist: google-cloud-bigquery>=3.0.0; extra == 'bigquery'
Provides-Extra: byconity
Requires-Dist: asynch>=0.2.0; extra == 'byconity'
Requires-Dist: clickhouse-driver>=0.2.0; extra == 'byconity'
Provides-Extra: cassandra
Requires-Dist: cassandra-driver>=3.25.0; extra == 'cassandra'
Provides-Extra: chromadb
Requires-Dist: chromadb>=0.4.0; extra == 'chromadb'
Provides-Extra: cirrodata
Requires-Dist: jaydebeapi>=1.2.0; extra == 'cirrodata'
Provides-Extra: clickhouse
Requires-Dist: asynch>=0.2.0; extra == 'clickhouse'
Requires-Dist: clickhouse-driver>=0.2.0; extra == 'clickhouse'
Provides-Extra: clickhouse-connect
Requires-Dist: clickhouse-connect>=0.8.0; extra == 'clickhouse-connect'
Provides-Extra: cockroachdb
Requires-Dist: dbutils>=3.0.0; extra == 'cockroachdb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'cockroachdb'
Provides-Extra: cosmosdb
Requires-Dist: gremlinpython>=3.5.0; extra == 'cosmosdb'
Provides-Extra: couchbase
Requires-Dist: couchbase>=4.0.0; extra == 'couchbase'
Provides-Extra: couchdb
Requires-Dist: couchdb>=1.0.0; extra == 'couchdb'
Provides-Extra: cratedb
Requires-Dist: dbutils>=3.0.0; extra == 'cratedb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'cratedb'
Provides-Extra: databricks
Requires-Dist: databricks-sql-connector>=0.10.0; extra == 'databricks'
Provides-Extra: deeplake
Requires-Dist: deeplake>=3.8.0; extra == 'deeplake'
Provides-Extra: descartes
Requires-Dist: requests>=2.28.0; extra == 'descartes'
Provides-Extra: dgraph
Requires-Dist: pydgraph>=23.0.0; extra == 'dgraph'
Provides-Extra: dingodb
Requires-Dist: dingodb>=0.1.0; extra == 'dingodb'
Provides-Extra: dm
Requires-Dist: dmpython>=2.0.0; extra == 'dm'
Provides-Extra: documentdb
Requires-Dist: motor>=3.0.0; extra == 'documentdb'
Requires-Dist: pymongo>=4.0.0; extra == 'documentdb'
Provides-Extra: dolphindb
Requires-Dist: dolphindb>=2.0.0; extra == 'dolphindb'
Provides-Extra: druid
Requires-Dist: pydruid>=0.6.0; extra == 'druid'
Provides-Extra: duckdb
Requires-Dist: duckdb>=0.8.0; extra == 'duckdb'
Provides-Extra: dws
Requires-Dist: aiopg>=1.4.0; extra == 'dws'
Requires-Dist: dbutils>=3.0.0; extra == 'dws'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'dws'
Provides-Extra: dynamodb
Requires-Dist: boto3>=1.26.0; extra == 'dynamodb'
Provides-Extra: elasticsearch
Requires-Dist: elasticsearch>=8.0.0; extra == 'elasticsearch'
Provides-Extra: etcd
Requires-Dist: etcd3>=0.12.0; extra == 'etcd'
Provides-Extra: fauna
Requires-Dist: fauna>=1.0.0; extra == 'fauna'
Provides-Extra: firebird
Requires-Dist: fdb>=2.0.0; extra == 'firebird'
Provides-Extra: firestore
Requires-Dist: google-cloud-firestore>=2.0.0; extra == 'firestore'
Provides-Extra: flink
Requires-Dist: requests>=2.28.0; extra == 'flink'
Provides-Extra: galaxybase
Requires-Dist: neo4j>=5.0.0; extra == 'galaxybase'
Provides-Extra: gaussdb
Requires-Dist: dbutils>=3.0.0; extra == 'gaussdb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'gaussdb'
Provides-Extra: gbase-8a
Requires-Dist: aiomysql>=0.2.0; extra == 'gbase-8a'
Requires-Dist: pymysql>=1.0.0; extra == 'gbase-8a'
Provides-Extra: gbase-8c
Requires-Dist: dbutils>=3.0.0; extra == 'gbase-8c'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'gbase-8c'
Provides-Extra: gbase-8s
Provides-Extra: goldendb
Requires-Dist: aiomysql>=0.2.0; extra == 'goldendb'
Requires-Dist: pymysql>=1.0.0; extra == 'goldendb'
Provides-Extra: graphdb
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'graphdb'
Provides-Extra: greatdb
Requires-Dist: aiomysql>=0.2.0; extra == 'greatdb'
Requires-Dist: pymysql>=1.0.0; extra == 'greatdb'
Provides-Extra: greenplum
Requires-Dist: dbutils>=3.0.0; extra == 'greenplum'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'greenplum'
Provides-Extra: gstore
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'gstore'
Provides-Extra: hbase
Requires-Dist: happybase>=2.0.0; extra == 'hbase'
Provides-Extra: highgo
Requires-Dist: dbutils>=3.0.0; extra == 'highgo'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'highgo'
Provides-Extra: hippo
Requires-Dist: jaydebeapi>=1.2.0; extra == 'hippo'
Provides-Extra: hive
Requires-Dist: dbutils>=3.0.0; extra == 'hive'
Requires-Dist: pyhive[hive]>=0.7.0; extra == 'hive'
Provides-Extra: http
Requires-Dist: httpx>=0.24.0; extra == 'http'
Provides-Extra: hubble
Requires-Dist: aiomysql>=0.2.0; extra == 'hubble'
Requires-Dist: pymysql>=1.0.0; extra == 'hubble'
Provides-Extra: hugegraph
Requires-Dist: hugegraph-python>=1.0.0; extra == 'hugegraph'
Provides-Extra: ibm-db2
Requires-Dist: ibm-db>=3.0.0; extra == 'ibm-db2'
Provides-Extra: impala
Requires-Dist: dbutils>=3.0.0; extra == 'impala'
Requires-Dist: impyla>=0.18.0; extra == 'impala'
Provides-Extra: influxdb
Requires-Dist: influxdb-client>=1.30.0; extra == 'influxdb'
Requires-Dist: influxdb>=5.3.0; extra == 'influxdb'
Provides-Extra: informix
Provides-Extra: intersystems-cache
Requires-Dist: jaydebeapi>=1.2.0; extra == 'intersystems-cache'
Provides-Extra: janusgraph
Requires-Dist: gremlinpython>=3.5.0; extra == 'janusgraph'
Provides-Extra: kafka
Requires-Dist: confluent-kafka>=2.0.0; extra == 'kafka'
Provides-Extra: kaiwudb
Requires-Dist: dbutils>=3.0.0; extra == 'kaiwudb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'kaiwudb'
Provides-Extra: kingbase
Requires-Dist: dbutils>=3.0.0; extra == 'kingbase'
Requires-Dist: ksycopg2>=2.9.0; extra == 'kingbase'
Provides-Extra: kudu
Requires-Dist: kudu-python>=1.0.0; extra == 'kudu'
Provides-Extra: kxdata
Provides-Extra: kylin
Requires-Dist: kylinpython>=1.0.0; extra == 'kylin'
Provides-Extra: lancedb
Requires-Dist: lancedb>=0.2.0; extra == 'lancedb'
Provides-Extra: matrixone
Requires-Dist: aiomysql>=0.2.0; extra == 'matrixone'
Requires-Dist: pymysql>=1.0.0; extra == 'matrixone'
Provides-Extra: maxcompute
Requires-Dist: pyodps>=0.11.0; extra == 'maxcompute'
Provides-Extra: memcached
Requires-Dist: pymemcache>=4.0.0; extra == 'memcached'
Provides-Extra: memgraph
Requires-Dist: neo4j>=5.0.0; extra == 'memgraph'
Provides-Extra: milvus
Requires-Dist: pymilvus>=2.0.0; extra == 'milvus'
Provides-Extra: mogdb
Requires-Dist: dbutils>=3.0.0; extra == 'mogdb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'mogdb'
Provides-Extra: mongo
Requires-Dist: motor>=3.0.0; extra == 'mongo'
Requires-Dist: pymongo>=4.0.0; extra == 'mongo'
Provides-Extra: mssql
Requires-Dist: dbutils>=3.0.0; extra == 'mssql'
Requires-Dist: pymssql>=2.2.0; extra == 'mssql'
Provides-Extra: mysql
Requires-Dist: aiomysql>=0.2.0; extra == 'mysql'
Requires-Dist: dbutils>=3.0.0; extra == 'mysql'
Requires-Dist: pymysql>=1.0.0; extra == 'mysql'
Provides-Extra: nebula
Requires-Dist: nebula3-python>=3.0.0; extra == 'nebula'
Provides-Extra: neo4j
Requires-Dist: neo4j>=5.0.0; extra == 'neo4j'
Provides-Extra: neptune
Requires-Dist: neo4j>=5.0.0; extra == 'neptune'
Provides-Extra: netezza
Requires-Dist: dbutils>=3.0.0; extra == 'netezza'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'netezza'
Provides-Extra: opengauss
Requires-Dist: dbutils>=3.0.0; extra == 'opengauss'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'opengauss'
Provides-Extra: opensearch
Requires-Dist: opensearch-py>=2.0.0; extra == 'opensearch'
Provides-Extra: oracle
Requires-Dist: cx-oracle>=8.0.0; extra == 'oracle'
Requires-Dist: dbutils>=3.0.0; extra == 'oracle'
Provides-Extra: orientdb
Requires-Dist: pyorient>=1.6.0; extra == 'orientdb'
Provides-Extra: pandadb
Requires-Dist: requests>=2.28.0; extra == 'pandadb'
Provides-Extra: pgvector
Requires-Dist: aiopg>=1.4.0; extra == 'pgvector'
Requires-Dist: dbutils>=3.0.0; extra == 'pgvector'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'pgvector'
Provides-Extra: pinecone
Requires-Dist: pinecone-client>=2.0.0; extra == 'pinecone'
Provides-Extra: pinot
Requires-Dist: pinotdb>=0.4.0; extra == 'pinot'
Provides-Extra: polardb
Requires-Dist: aiomysql>=0.2.0; extra == 'polardb'
Requires-Dist: pymysql>=1.0.0; extra == 'polardb'
Provides-Extra: postgresql
Requires-Dist: aiopg>=1.4.0; extra == 'postgresql'
Requires-Dist: dbutils>=3.0.0; extra == 'postgresql'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'postgresql'
Provides-Extra: presto
Requires-Dist: dbutils>=3.0.0; extra == 'presto'
Requires-Dist: pyhive[presto]>=0.7.0; extra == 'presto'
Provides-Extra: prometheus
Requires-Dist: prometheus-api-client>=0.5.0; extra == 'prometheus'
Provides-Extra: qdrant
Requires-Dist: qdrant-client>=1.0.0; extra == 'qdrant'
Provides-Extra: redis
Requires-Dist: aioredis>=2.0.0; extra == 'redis'
Requires-Dist: redis>=4.5.0; extra == 'redis'
Provides-Extra: redis-cluster
Requires-Dist: aioredis-cluster>=0.3.0; extra == 'redis-cluster'
Requires-Dist: redis-py-cluster>=2.0.0; extra == 'redis-cluster'
Provides-Extra: redis-vector
Requires-Dist: aioredis>=2.0.0; extra == 'redis-vector'
Requires-Dist: redis>=4.5.0; extra == 'redis-vector'
Provides-Extra: redshift
Requires-Dist: dbutils>=3.0.0; extra == 'redshift'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'redshift'
Provides-Extra: sap-ase
Requires-Dist: pymssql>=2.2.0; extra == 'sap-ase'
Provides-Extra: sap-hana
Requires-Dist: hdbcli>=2.10.0; extra == 'sap-hana'
Provides-Extra: scylladb
Requires-Dist: cassandra-driver>=3.25.0; extra == 'scylladb'
Provides-Extra: selectdb
Requires-Dist: aiomysql>=0.2.0; extra == 'selectdb'
Requires-Dist: pymysql>=1.0.0; extra == 'selectdb'
Provides-Extra: sequoiadb
Provides-Extra: shentong
Requires-Dist: dbutils>=3.0.0; extra == 'shentong'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'shentong'
Provides-Extra: singlestore
Requires-Dist: aiomysql>=0.2.0; extra == 'singlestore'
Requires-Dist: pymysql>=1.0.0; extra == 'singlestore'
Provides-Extra: snowflake
Requires-Dist: snowflake-connector-python>=3.0.0; extra == 'snowflake'
Requires-Dist: snowflake-sqlalchemy>=1.4.0; extra == 'snowflake'
Provides-Extra: sqlalchemy
Requires-Dist: sqlalchemy>=2.0.0; extra == 'sqlalchemy'
Provides-Extra: sqlite
Requires-Dist: aiosqlite3>=0.18.0; extra == 'sqlite'
Requires-Dist: dbutils>=3.0.0; extra == 'sqlite'
Provides-Extra: stardog
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'stardog'
Provides-Extra: starrocks
Requires-Dist: aiomysql>=0.2.0; extra == 'starrocks'
Requires-Dist: pymysql>=1.0.0; extra == 'starrocks'
Provides-Extra: stellardb
Requires-Dist: jaydebeapi>=1.2.0; extra == 'stellardb'
Provides-Extra: stonedb
Requires-Dist: aiomysql>=0.2.0; extra == 'stonedb'
Requires-Dist: pymysql>=1.0.0; extra == 'stonedb'
Provides-Extra: surrealdb
Requires-Dist: surrealdb>=0.3.0; extra == 'surrealdb'
Provides-Extra: tchouse
Requires-Dist: asynch>=0.2.0; extra == 'tchouse'
Requires-Dist: clickhouse-driver>=0.2.0; extra == 'tchouse'
Provides-Extra: tdengine
Requires-Dist: taos-ws-py>=1.0.0; extra == 'tdengine'
Requires-Dist: taospy>=3.0.0; extra == 'tdengine'
Provides-Extra: tdsql
Requires-Dist: aiomysql>=0.2.0; extra == 'tdsql'
Requires-Dist: pymysql>=1.0.0; extra == 'tdsql'
Provides-Extra: tencent-vectordb
Requires-Dist: tcvectordb>=1.0.0; extra == 'tencent-vectordb'
Provides-Extra: tensordb
Requires-Dist: requests>=2.28.0; extra == 'tensordb'
Provides-Extra: teradata
Requires-Dist: teradatasql>=20.0.0; extra == 'teradata'
Provides-Extra: tigergraph
Requires-Dist: pytigergraph>=0.7.0; extra == 'tigergraph'
Provides-Extra: timechodb
Requires-Dist: apache-iotdb>=0.13.0; extra == 'timechodb'
Provides-Extra: timescaledb
Requires-Dist: dbutils>=3.0.0; extra == 'timescaledb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'timescaledb'
Provides-Extra: timestream
Requires-Dist: boto3>=1.26.0; extra == 'timestream'
Provides-Extra: trino
Requires-Dist: dbutils>=3.0.0; extra == 'trino'
Requires-Dist: trino>=0.300.0; extra == 'trino'
Provides-Extra: tugraph
Requires-Dist: requests>=2.28.0; extra == 'tugraph'
Provides-Extra: ultipa
Requires-Dist: ultipa>=2.0.0; extra == 'ultipa'
Provides-Extra: uxdb
Requires-Dist: dbutils>=3.0.0; extra == 'uxdb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'uxdb'
Provides-Extra: vastbase
Requires-Dist: dbutils>=3.0.0; extra == 'vastbase'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'vastbase'
Provides-Extra: vearch
Requires-Dist: requests>=2.28.0; extra == 'vearch'
Provides-Extra: vertica
Requires-Dist: vertica-python>=1.0.0; extra == 'vertica'
Provides-Extra: vespa
Requires-Dist: vespa>=0.5.0; extra == 'vespa'
Provides-Extra: vexdb
Requires-Dist: requests>=2.28.0; extra == 'vexdb'
Provides-Extra: vikingdb
Requires-Dist: volcengine>=1.0.0; extra == 'vikingdb'
Provides-Extra: virtuoso
Requires-Dist: sparqlwrapper>=2.0.0; extra == 'virtuoso'
Provides-Extra: weaviate
Requires-Dist: weaviate-client>=3.0.0; extra == 'weaviate'
Provides-Extra: xugudb
Requires-Dist: jaydebeapi>=1.2.0; extra == 'xugudb'
Provides-Extra: yashandb
Provides-Extra: yugabytedb
Requires-Dist: dbutils>=3.0.0; extra == 'yugabytedb'
Requires-Dist: psycopg2-binary>=2.9.0; extra == 'yugabytedb'
Description-Content-Type: text/markdown

# lesscode-database

[![CI](https://github.com/navysummer/lesscode_database/actions/workflows/ci.yml/badge.svg)](https://github.com/navysummer/lesscode_database/actions/workflows/ci.yml)
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)

Enterprise-grade database connection toolkit supporting **146 database dialects** with a unified interface.

## Features

- **Unified connection management** — single API for relational, NoSQL, vector, graph, time-series, cloud data warehouses, and Chinese domestic databases
- **Connection pooling** — automatic pool creation (sync and async) with configurable sizes
- **Async-first** — full support for async/await where the driver allows it
- **Built-in ORM** — lightweight SQL generation (SELECT, INSERT, UPDATE, DELETE, CREATE TABLE) with parameter binding
- **SQL injection prevention** — parameterised conditions via helper functions (`eq`, `in_list`, `between`, `like_`, etc.)
- **Model generation** — CLI tool to auto-generate ORM model files from existing database schemas

## Quick Start

```python
from lesscode_database.connection_info import ConnectionInfo
from lesscode_database.db_options import db_options
from lesscode_database.ds_helper import DsHelper

# 1. Configure connections
db_options.conn_list = [
    ConnectionInfo(
        dialect='mysql', name='mydb', host='127.0.0.1',
        port=3306, user='root', password='secret',
        db_name='test', enable=True,
    ),
]

# 2. Acquire a connection and execute SQL
with DsHelper('mydb').pool.dedicated_connection() as conn:
    with conn.cursor() as cursor:
        cursor.execute('SELECT 1')
        print(cursor.fetchone())
```

## Installation

```bash
# Core package (no drivers)
pip install lesscode-database

# With specific driver groups
pip install "lesscode-database[mysql]"
pip install "lesscode-database[postgresql]"
pip install "lesscode-database[clickhouse]"
pip install "lesscode-database[mongo]"
pip install "lesscode-database[all]"   # everything
```

## Documentation

- [Documentation Index](doc/INDEX.md) — per-dialect docs for all 146 databases
- [Connection Configuration](lesscode_database/connection_info.py)
- [Connection Pools](lesscode_database/connect_pool/)
- [ORM Usage](lesscode_database/orm/)
- [Examples](example/)

## Supported Databases (146 dialects)

### Standard Databases
MySQL, MariaDB, PostgreSQL, ClickHouse, SQLite, MSSQL, Oracle

### NoSQL Databases
MongoDB, Redis, Redis Cluster, Cassandra, ScyllaDB, Amazon Keyspaces, CouchDB, Couchbase, InfluxDB, DynamoDB, Timestream, DocumentDB, Memcached, ArangoDB, etcd, Firestore, Dgraph, SurrealDB

### Graph Databases
Neo4j, Amazon Neptune, NebulaGraph, TigerGraph, JanusGraph, Azure Cosmos DB (Gremlin), GraphDB, Memgraph, OrientDB, Stardog, AllegroGraph, Fauna, Virtuoso, Galaxybase, TuGraph, StellarDB, Ultipa, gStore, PandaDB

### Vector Databases
Milvus, Qdrant, Weaviate, Pinecone, OpenSearch, ChromaDB, PgVector, Redis Vector, LanceDB, Deep Lake, Vespa

### Big Data / Cloud Data Warehouses
Hive, Spark Thrift, Trino, Presto, Impala, HBase, Kafka, Kudu, Flink SQL Gateway, Snowflake, Amazon Redshift, BigQuery, Databricks, Vertica, Teradata, Greenplum, MaxCompute, AnalyticDB, TCHouse, DWS, Azure Synapse Analytics, SQLAlchemy

### Time-series / OLAP
TimescaleDB, CrateDB, Apache Druid, Apache Pinot, Prometheus, DuckDB

### Enterprise Databases
SAP HANA, SAP ASE, IBM Informix, IBM Netezza, InterSystems Caché, IBM Db2, Firebird, SingleStore

### Chinese MySQL-compatible Databases
TiDB, Doris, OceanBase, PolarDB, PolarDB-X, TDSQL, TDSQL-C, GoldenDB, GreatDB, GBase 8a, StarRocks, SelectDB, StoneDB, MatrixOne, Hubble

### Chinese PostgreSQL-compatible Databases
KingbaseES, GBase 8c, openGauss, GaussDB, MogDB, AntDB, HighGo, UXDB, Vastbase, ShenTong, KaiwuDB, PgVector, KXData

### Chinese Proprietary Databases
DaMeng (DM), ByConity, TDengine, YashanDB, SequoiaDB, XuguDB, GBase 8s, Kylin, CirroData, TimechoDB, DolphinDB, ArgoDB, Hippo

### Chinese Vector Databases
Tencent Cloud VectorDB, VexDB, DingoDB, Vearch, VikingDB, Baidu VectorDB, TensorDB, Descartes, ArcVector

## ORM Example

```python
from lesscode_database.orm.orm_model import BaseModel
from lesscode_database.orm.orm_typing import Int, Varchar, eq
from lesscode_database.orm.orm_exec import Select, CreateTable

class User(BaseModel):
    __table_name__ = 'users'
    __bind_key__ = 'postgresql'
    id = Int('id', int, primary_key=True)
    name = Varchar('name', str, length=100)

# Generate DDL
ddl = CreateTable(User)._sql()
print(ddl)

# Build a query
sel = Select(User.id, User.name).select_from(User).where(eq(User.id, 1))
print(sel._sql())      # SELECT users.id,users.name FROM users WHERE users.id=%s
print(sel._params)     # [1]
```

See [example/orm.py](example/orm.py) for more ORM examples.

## Model Code Generation

```bash
# Generate model files from an existing MySQL database
model-gen --url "mysql+pymysql://user:pass@host:3306/db" --output ./models

# From PostgreSQL
model-gen --url "postgresql+psycopg2://user:pass@host:5432/db" --output ./models

# From SQLite
model-gen --url "sqlite+aiosqlite:///path/to/db.sqlite" --output ./models

# From ClickHouse
model-gen --url "clickhouse+clickhouse_driver://user:pass@host:9000/db" --output ./models
```

## Development

```bash
make install-dev   # install with all extras
make check         # lint + format check + type check
make test          # run tests
make test-cov      # run tests with coverage
```

## License

MIT
