Python client library for Altertable.
pip install altertable-flightsqlfrom altertable_flightsql import Client
# Connect to Altertable
with Client(username="your_username", password="your_password") as client:
# Execute a query
reader = client.query("SELECT * FROM users WHERE age > 18")
# Process results
for batch in reader:
df = batch.data.to_pandas()
print(df)# Connect to custom host/port
client = Client(
username="admin",
password="secret",
catalog="my_catalog",
schema="my_schema"
)# Execute SELECT query
reader = client.query("SELECT * FROM users")
for batch in reader:
print(batch.data.to_pandas())
# Execute INSERT/UPDATE/DELETE
rows_affected = client.execute("INSERT INTO users (name) VALUES ('Alice')")
print(f"Affected {rows_affected} rows")# Prepare once, execute multiple times
with client.prepare("SELECT * FROM users WHERE id = $id") as stmt:
result = stmt.query(parameters={"id": 1}))
for batch in result:
print(batch.data.to_pandas())with client.begin_transaction():
client.execute("INSERT INTO users ...")
client.execute("UPDATE accounts ...")# Get catalogs, schemas, tables
catalogs = client.get_catalogs()
schemas = client.get_schemas(catalog="my_db")
tables = client.get_tables(catalog="my_db", schema_pattern="public")# Clone repository
git clone https://github.com/altertable-ai/altertable-flightsql-python.git
cd altertable-flightsql-python
# Install with dev dependencies
pip install -e ".[dev]"pytest # Run testsmake lint # Run all linters (isort, black, ruff, mypy)If you modify the .proto files, you need to recompile them:
make gen # Compile protobuf definitionsImportant: The CI will fail if generated files are out of sync with the proto definitions. Always run make gen and commit the generated files after modifying .proto files.
See the examples/ directory for complete examples:
# High-level client examples
python examples/client_usage.pyThis package includes comprehensive integration tests that validate functionality against a real Altertable service.
Using testcontainers (local development):
# Install development dependencies
pip install -e ".[dev]"
# Run all tests
# Having the ghcr.io/altertable-ai/altertable-mock docker image locally will speed things up.
pytest tests/Using an existing service (CI/production):
# Set environment variables
export ALTERTABLE_HOST=localhost
export ALTERTABLE_PORT=15002
export ALTERTABLE_USERNAME=altertable-test
export ALTERTABLE_PASSWORD=lk_test
# Run tests
pytest tests/The test suite automatically detects whether to use testcontainers or an existing service based on environment variables. If ALTERTABLE_HOST and ALTERTABLE_PORT are set, tests will connect to that service. Otherwise, they'll start a Docker container with altertable.ai/altertable-mock.
Contributions are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with tests
- If you modified
.protofiles, runmake gen - Run code quality checks:
make lintandpytest - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PEP 8 style (enforced by Black, line length: 100)
- Add tests for new features
- Include docstrings (Google style)
- Update documentation as needed
- Run
make genand commit generated files when modifying.protofiles - Run
make lintbefore committing to ensure code quality
altertable-flightsql/
├── src/altertable_flightsql/
│ ├── __init__.py # Package exports
│ ├── client.py # Main Client class
│ └── generated/ # Internal protocol definitions
├── tests/ # Test suite
└── examples/ # Usage examples
MIT License - See LICENSE file for details.
Built on Apache Arrow Flight SQL protocol.
Built on Apache Arrow Flight SQL protocol.