262 lines
4.2 KiB
Markdown
262 lines
4.2 KiB
Markdown
# Neon Python SDK
|
|
|
|
The `neon-api` Python SDK is a Pythonic wrapper around the Neon REST API. It provides methods for managing all Neon resources, including projects, branches, endpoints, roles, and databases.
|
|
|
|
For core concepts (Organization, Project, Branch, Endpoint, etc.), see `what-is-neon.md`.
|
|
|
|
## Documentation
|
|
|
|
```bash
|
|
curl -H "Accept: text/markdown" https://neon.tech/docs/reference/python-sdk
|
|
```
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install neon-api
|
|
```
|
|
|
|
## Authentication
|
|
|
|
```python
|
|
import os
|
|
from neon_api import NeonAPI
|
|
|
|
api_key = os.getenv("NEON_API_KEY")
|
|
if not api_key:
|
|
raise ValueError("NEON_API_KEY environment variable is not set.")
|
|
|
|
neon = NeonAPI(api_key=api_key)
|
|
```
|
|
|
|
## Projects
|
|
|
|
### List Projects
|
|
|
|
```python
|
|
all_projects = neon.projects()
|
|
```
|
|
|
|
### Create Project
|
|
|
|
```python
|
|
new_project = neon.project_create(
|
|
project={
|
|
'name': 'my-new-project',
|
|
'pg_version': 17
|
|
}
|
|
)
|
|
```
|
|
|
|
### Get Project Details
|
|
|
|
```python
|
|
project = neon.project(project_id='your-project-id')
|
|
```
|
|
|
|
### Update Project
|
|
|
|
```python
|
|
neon.project_update(
|
|
project_id='your-project-id',
|
|
project={
|
|
'name': 'renamed-project',
|
|
'default_endpoint_settings': {
|
|
'autoscaling_limit_min_cu': 1,
|
|
'autoscaling_limit_max_cu': 2,
|
|
}
|
|
}
|
|
)
|
|
```
|
|
|
|
### Delete Project
|
|
|
|
```python
|
|
neon.project_delete(project_id='project-to-delete')
|
|
```
|
|
|
|
### Get Connection URI
|
|
|
|
```python
|
|
uri = neon.connection_uri(
|
|
project_id='your-project-id',
|
|
database_name='neondb',
|
|
role_name='neondb_owner'
|
|
)
|
|
print(f"Connection URI: {uri.uri}")
|
|
```
|
|
|
|
## Branches
|
|
|
|
### Create Branch
|
|
|
|
```python
|
|
new_branch = neon.branch_create(
|
|
project_id='your-project-id',
|
|
branch={'name': 'feature-branch'},
|
|
endpoints=[
|
|
{'type': 'read_write', 'autoscaling_limit_max_cu': 1}
|
|
]
|
|
)
|
|
```
|
|
|
|
### List Branches
|
|
|
|
```python
|
|
branches = neon.branches(project_id='your-project-id')
|
|
```
|
|
|
|
### Get Branch Details
|
|
|
|
```python
|
|
branch = neon.branch(project_id='your-project-id', branch_id='br-xxx')
|
|
```
|
|
|
|
### Update Branch
|
|
|
|
```python
|
|
neon.branch_update(
|
|
project_id='your-project-id',
|
|
branch_id='br-xxx',
|
|
branch={'name': 'updated-branch-name'}
|
|
)
|
|
```
|
|
|
|
### Delete Branch
|
|
|
|
```python
|
|
neon.branch_delete(project_id='your-project-id', branch_id='br-xxx')
|
|
```
|
|
|
|
## Databases
|
|
|
|
### Create Database
|
|
|
|
```python
|
|
neon.database_create(
|
|
project_id='your-project-id',
|
|
branch_id='br-xxx',
|
|
database={'name': 'my-app-db', 'owner_name': 'neondb_owner'}
|
|
)
|
|
```
|
|
|
|
### List Databases
|
|
|
|
```python
|
|
databases = neon.databases(project_id='your-project-id', branch_id='br-xxx')
|
|
```
|
|
|
|
### Delete Database
|
|
|
|
```python
|
|
neon.database_delete(
|
|
project_id='your-project-id',
|
|
branch_id='br-xxx',
|
|
database_id='my-app-db'
|
|
)
|
|
```
|
|
|
|
## Roles
|
|
|
|
### Create Role
|
|
|
|
```python
|
|
new_role = neon.role_create(
|
|
project_id='your-project-id',
|
|
branch_id='br-xxx',
|
|
role_name='app_user'
|
|
)
|
|
print(f"Password: {new_role.role.password}")
|
|
```
|
|
|
|
### List Roles
|
|
|
|
```python
|
|
roles = neon.roles(project_id='your-project-id', branch_id='br-xxx')
|
|
```
|
|
|
|
### Delete Role
|
|
|
|
```python
|
|
neon.role_delete(
|
|
project_id='your-project-id',
|
|
branch_id='br-xxx',
|
|
role_name='app_user'
|
|
)
|
|
```
|
|
|
|
## Endpoints
|
|
|
|
### Create Endpoint
|
|
|
|
```python
|
|
neon.endpoint_create(
|
|
project_id='your-project-id',
|
|
endpoint={
|
|
'branch_id': 'br-xxx',
|
|
'type': 'read_only'
|
|
}
|
|
)
|
|
```
|
|
|
|
### Start/Suspend Endpoint
|
|
|
|
```python
|
|
# Start
|
|
neon.endpoint_start(project_id='your-project-id', endpoint_id='ep-xxx')
|
|
|
|
# Suspend
|
|
neon.endpoint_suspend(project_id='your-project-id', endpoint_id='ep-xxx')
|
|
```
|
|
|
|
### Update Endpoint
|
|
|
|
```python
|
|
neon.endpoint_update(
|
|
project_id='your-project-id',
|
|
endpoint_id='ep-xxx',
|
|
endpoint={'autoscaling_limit_max_cu': 2}
|
|
)
|
|
```
|
|
|
|
### Delete Endpoint
|
|
|
|
```python
|
|
neon.endpoint_delete(project_id='your-project-id', endpoint_id='ep-xxx')
|
|
```
|
|
|
|
## API Keys
|
|
|
|
### List API Keys
|
|
|
|
```python
|
|
api_keys = neon.api_keys()
|
|
```
|
|
|
|
### Create API Key
|
|
|
|
```python
|
|
new_key = neon.api_key_create(key_name='my-script-key')
|
|
print(f"Key (store securely!): {new_key.key}")
|
|
```
|
|
|
|
### Revoke API Key
|
|
|
|
```python
|
|
neon.api_key_revoke(1234) # key ID
|
|
```
|
|
|
|
## Operations
|
|
|
|
### List Operations
|
|
|
|
```python
|
|
ops = neon.operations(project_id='your-project-id')
|
|
```
|
|
|
|
### Get Operation Details
|
|
|
|
```python
|
|
op = neon.operation(project_id='your-project-id', operation_id='op-xxx')
|
|
```
|