import requests
import json
from typing import List, Dict, Any, Optional
class PgApiClient:
def __init__(self, base_url: str, api_token: str):
self.base_url = base_url.rstrip('/')
self.api_token = api_token
self.session = requests.Session()
self.session.headers.update({
'Authorization': f'Bearer {api_token}',
'Content-Type': 'application/json'
})
def query(self, query: str, params: Optional[List] = None, database: str = "main") -> Dict[str, Any]:
response = self.session.post(
f"{self.base_url}/v1/query",
json={
"query": query,
"params": params or [],
"database": database
}
)
response.raise_for_status()
return response.json()
def batch(self, queries: List[Dict], database: str = "main") -> List[Dict[str, Any]]:
response = self.session.post(
f"{self.base_url}/v1/batch",
json={
"queries": queries,
"database": database
}
)
response.raise_for_status()
return response.json()
def transaction(self, queries: List[Dict], database: str = "main") -> List[Dict[str, Any]]:
response = self.session.post(
f"{self.base_url}/v1/transaction",
json={
"queries": queries,
"database": database
}
)
response.raise_for_status()
return response.json()
def list_databases(self) -> List[str]:
response = self.session.get(f"{self.base_url}/v1/databases")
response.raise_for_status()
return response.json()
def list_tables(self, database: str) -> List[Dict[str, Any]]:
response = self.session.get(f"{self.base_url}/v1/databases/{database}/tables")
response.raise_for_status()
return response.json()
def get_schema(self, database: str) -> Dict[str, Any]:
response = self.session.get(f"{self.base_url}/v1/databases/{database}/schema")
response.raise_for_status()
return response.json()
def health_check(self) -> Dict[str, Any]:
response = requests.get(f"{self.base_url}/health")
response.raise_for_status()
return response.json()
def main():
client = PgApiClient(
base_url="http://localhost:8580",
api_token="sk_live_your_token_here"
)
print("Health check:", client.health_check())
result = client.query(
"SELECT * FROM users WHERE active = $1 LIMIT 5",
params=[True]
)
print("\nActive users:", json.dumps(result, indent=2))
batch_results = client.batch([
{
"query": "SELECT COUNT(*) as total FROM users",
"params": []
},
{
"query": "SELECT COUNT(*) as active FROM users WHERE active = true",
"params": []
}
])
print("\nBatch results:", json.dumps(batch_results, indent=2))
databases = client.list_databases()
print("\nDatabases:", databases)
if databases:
tables = client.list_tables(databases[0])
print(f"\nTables in {databases[0]}:", json.dumps(tables, indent=2))
if __name__ == "__main__":
main()