Skip to main content

GoData

SDK Python e proxy HTTP para SQL Server com autenticação integrada do Windows. Configure uma vez e execute T-SQL diretamente por Python, sem montar requisições requests ou administrar conexões ODBC no cliente.

Aplicação Python → GoData → SQL Server

Aplicação Python ── API key ──> GoData ── conta Windows/AD ──> SQL Server

O cliente não envia nem recebe a credencial do domínio. O GoData não interpreta, filtra ou restringe o SQL: cada comando é encaminhado ao SQL Server e executado com as permissões da conta Windows que hospeda o serviço.

SDK Python: começo rápido

Para a versão publicada no PyPI, instale o pacote:

pip install godata-sdk

Para usar imediatamente a versão mais recente deste repositório:

pip install "godata @ git+https://github.com/wanbnn/godata.git@main"

Crie uma engine apontando para a URL do GoData, a API key e o servidor/banco SQL desejados:

from godata import create_engine

engine = create_engine(
    url="https://godata.suaempresa.com",
    api_key="sua-api-key",
    server="sqlserver01\\PRODUCAO",
    database="ERP",
)

Use query (ou seu alias execute) para qualquer T-SQL. Os parâmetros usam ?, como no ODBC:

result = engine.query(
    "SELECT id, nome FROM dbo.clientes WHERE ativo = ?",
    [True],
)

for cliente in result.mappings():
    print(cliente["id"], cliente["nome"])

Alterações seguem a mesma interface e são confirmadas pelo GoData quando bem-sucedidas:

result = engine.execute(
    "UPDATE dbo.clientes SET ativo = ? WHERE id = ?",
    [False, 42],
)
print(result.rows_affected)

Também são aceitos procedures, DDL e lotes:

engine.query("EXEC dbo.recalcular_faturas ?", ["2026-09-01"])
engine.query("CREATE TABLE dbo.exemplo (id int PRIMARY KEY); INSERT INTO dbo.exemplo VALUES (1);")

result.rows contém vetores, result.mappings() retorna dicionários, result.first() traz a primeira linha e result.rows_affected informa linhas afetadas quando fornecido pelo SQL Server. Quando um lote retornar múltiplos conjuntos, o primeiro é devolvido.

Instalação automática no Windows

No PowerShell, instale com:

irm https://raw.githubusercontent.com/wanbnn/godata/main/install.ps1 | iex

No Prompt de Comando (CMD), use curl:

curl.exe -fsSL https://raw.githubusercontent.com/wanbnn/godata/main/install.bat -o "%TEMP%\godata-install.bat" && call "%TEMP%\godata-install.bat"

Ou, quando wget.exe estiver disponível:

wget.exe -q https://raw.githubusercontent.com/wanbnn/godata/main/install.bat -O "%TEMP%\godata-install.bat" && call "%TEMP%\godata-install.bat"

O instalador baixa o GoData em %LOCALAPPDATA%\GoData, localiza ou instala Python 3.11+, instala o Microsoft ODBC Driver 18 quando necessário, baixa o cloudflared, cria o ambiente virtual e gera uma API key criptograficamente aleatória. Uma reinstalação preserva a chave; para substituí-la, baixe o install.ps1 e execute-o com -RotateApiKey.

A instalação automática grava estes padrões:

GODATA_ODBC_DRIVER=ODBC Driver 18 for SQL Server
GODATA_ENCRYPT=true
GODATA_TRUST_SERVER_CERTIFICATE=true
GODATA_CONNECTION_TIMEOUT_SECONDS=2048
GODATA_QUERY_TIMEOUT_SECONDS=0
GODATA_MAX_CONCURRENT_QUERIES=10

Ao entrar no Windows, uma janela inicia o GoData e mostra a API key e a nova URL temporária trycloudflare.com. A janela deve permanecer aberta. O instalador tenta registrar o startup, nesta ordem:

  1. tarefa interativa no Agendador de Tarefas;
  2. chave Run do usuário no Registro;
  3. atalho direto para o launcher Python na pasta Startup do usuário.

Todos os métodos são verificados antes de o instalador concluir. Políticas corporativas podem bloquear CMD, PowerShell, downloads ou todos os mecanismos de startup; essas restrições do Windows não podem ser contornadas pelo instalador. A instalação do driver ODBC pode apresentar um prompt UAC, que precisa ser autorizado pelo usuário ou administrador.

Requisitos

  • Windows Server ou Windows 10/11 ingressado no domínio;
  • Python 3.11 ou superior;
  • Microsoft ODBC Driver 18 for SQL Server;
  • cloudflared instalado e disponível no PATH;
  • uma conta AD dedicada, com as permissões necessárias nos bancos acessados.

As consultas são executadas com as permissões da conta AD do serviço. Restrinja essa conta ao mínimo necessário e não exponha a API para redes não confiáveis.

Instalação com PRPM

Com o prpm disponível, dentro desta pasta:

prpm install
Copy-Item .env.example .env

O prpm install cria a .venv, resolve dependências normais e de desenvolvimento e grava as versões exatas em prpm.lock. Para iniciar o servidor de desenvolvimento com reload:

prpm run dev

Para iniciar sem reload:

prpm run start

O GoData carrega automaticamente o arquivo .env da pasta em que o comando é executado. Variáveis definidas diretamente no ambiente do processo têm precedência sobre o arquivo. Se preferir, defina-as no PowerShell antes de iniciar:

$env:GODATA_API_KEY = "uma-chave-aleatoria-com-pelo-menos-24-caracteres"
$env:GODATA_ODBC_DRIVER = "ODBC Driver 18 for SQL Server"
$env:GODATA_ENCRYPT = "true"
$env:GODATA_TRUST_SERVER_CERTIFICATE = "true"

prpm run dev

Abra http://localhost:4400/docs para consultar o OpenAPI/Swagger.

Cloudflare Tunnel

O GoData escuta apenas em 127.0.0.1:4400; o acesso externo deve passar pelo cloudflared. Para criar um endereço temporário de teste, mantenha prpm run dev ou prpm run start em execução e, em outro terminal, rode:

prpm run tunnel

O comando exibe uma URL aleatória https://*.trycloudflare.com. Esse modo não exige conta, mas é destinado somente a testes.

Para produção, autentique e crie um túnel nomeado:

cloudflared tunnel login
cloudflared tunnel create godata
cloudflared tunnel route dns godata godata.seudominio.com
Copy-Item cloudflared/config.yml.example cloudflared/config.yml

Edite cloudflared/config.yml com o UUID do túnel, o caminho do arquivo de credenciais e o hostname criado. O arquivo local é ignorado pelo Git. Depois, com o GoData em execução, inicie o túnel:

prpm run tunnel-prod

Em produção, configure prpm run start e prpm run tunnel-prod como serviços Windows sob as contas apropriadas. A porta 4400 não precisa ser liberada no firewall, pois o cloudflared estabelece uma conexão de saída com a Cloudflare. Mantenha a exigência de X-API-Key e, se o endpoint não for público, aplique também uma política do Cloudflare Access.

Em produção, execute esse comando como serviço Windows sob a conta de domínio dedicada. A conta do serviço precisa ter Log on as a service, acesso de rede ao SQL Server e o login correspondente provisionado no SQL Server. Não use --reload em produção.

API HTTP (opcional)

POST /v1/query HTTP/1.1
Host: godata.interno:4400
X-API-Key: sua-chave
Content-Type: application/json

{
  "server": "sqlserver01",
  "database": "ERP",
  "query": "SELECT TOP (100)\n    id,\n    nome\nFROM dbo.clientes\nWHERE ativo = ?\nORDER BY nome",
  "parameters": [true]
}

Exemplo de resposta:

{
  "request_id": "fdcd635b-1913-41cf-956d-64a4f64ea3fa",
  "columns": ["id", "nome"],
  "rows": [[1, "Empresa A"], [2, "Empresa B"]],
  "row_count": 2,
  "rows_affected": 0,
  "truncated": false,
  "elapsed_ms": 18
}

Uma query pode ocupar quantas linhas forem necessárias: no JSON, cada quebra de linha é representada por \n. Não há whitelist, parser ou limite de tamanho de SQL no GoData: são aceitos comandos T-SQL de leitura e escrita, procedures, DDL e lotes com múltiplas instruções. Para comandos que não retornam dados, columns e rows ficam vazios e rows_affected informa o total de linhas afetadas quando o SQL Server o disponibiliza. Quando um lote produz mais de um conjunto de resultados, a resposta contém o primeiro deles.

Os parâmetros usam marcadores ? do ODBC. Valores decimal são retornados como string para preservar precisão; datas usam ISO 8601; binários usam Base64. Os dados são retornados como vetores para preservar colunas duplicadas no resultado.

Discovery de metadados

Os endpoints de discovery exigem o mesmo header X-API-Key e mostram somente objetos visíveis para a conta Windows que executa o GoData:

GET /v1/discovery/databases?server=sqlserver01
GET /v1/discovery/schemas?server=sqlserver01&database=ERP
GET /v1/discovery/tables?server=sqlserver01&database=ERP&schema=dbo
GET /v1/discovery/columns?server=sqlserver01&database=ERP&schema=dbo&table=clientes

O parâmetro schema em /tables é opcional; sem ele, tabelas e views de todos os schemas visíveis são retornadas. Os endpoints também estão disponíveis para teste interativo em /docs.

Controles operacionais

  • X-API-Key, comparada em tempo constante;
  • parâmetros ODBC separados do SQL;
  • conexão com ApplicationIntent=ReadWrite e commit após execução bem-sucedida;
  • rollback e fechamento da conexão em caso de falha;
  • timeout de conexão e de consulta;
  • limite configurável de consultas simultâneas;
  • X-Request-ID para correlação sem registrar a consulta ou os dados.

O banco não é publicado diretamente pelo GoData. O servidor HTTP fica acessível apenas no loopback e o Cloudflare Tunnel fornece a conexão externa com TLS, sem expor a porta 4400.

Por padrão, GODATA_QUERY_TIMEOUT_SECONDS=0 permite que a consulta termine sem um limite artificial de execução. Defina um valor positivo para impor um limite. O GODATA_CONNECTION_TIMEOUT_SECONDS continua limitando separadamente a abertura da conexão.

Testes

Os testes não precisam de um SQL Server real:

prpm install
prpm run test

Metadata

Release files for godata-sdk 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for godata-sdk 0.2.0
File Size Uploaded
godata_sdk-0.2.0.tar.gz 1.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for godata-sdk 0.2.0
File Interpreter ABI Platform
godata_sdk-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.4 MB

Release files / godata_sdk-0.2.0.tar.gz

Download URL godata_sdk-0.2.0.tar.gz
Size 1.4 MB
Tags Source
SHA-256 checksum
How to use checksums
d1c7efaf97fd3739ac08ba53263340f40eeaf7700421f0a066ede0b8651a49fa
BLAKE2b-256 checksum
How to use checksums
8516806d097ec5125d8cde0ba97c184d3ce223c90b94f7c5e92b6849f51fd8fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / godata_sdk-0.2.0-py3-none-any.whl

Download URL godata_sdk-0.2.0-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b079d78c1c7b391df105e6df881a420a3166196f04d58ee4b63c28f50b1fb5e1
BLAKE2b-256 checksum
How to use checksums
84f9adc7c663dd06609f7ead39bce1854b0e858092c828a1bbc8ae8c5c6f64b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page