# CartoDB
El BackEndBase permite utilizar la API SQL de CartoDB (opens new window) para insertar, actualizar o eliminar datos.
Ejemplo: Insertar una nueva columna con datos de latitud y longitud ó seleccionar datos de tablas públicas para usarlos en tu aplicación.
La versíon soportada aquí, es la SQL API v2
# Configuración
En el archivo app/config/cartodb.py se establecen la url, el nombre de la cuenta y la api key
de CartoDB, necesarios para el correcto funcionamiento del módulo.
# app/config/cartodb.py
CARTODB_URI = "https://{0}.cartodb.com/api/v2/sql"
CARTODB_ACCOUNT = 'awesome_cartodb_account'
CARTODB_API_KEY = 'awesome_cartodb_api_key'
# Utilizando cartoDB SQL API
Este módulo tiene 3 funciones:
# sql_api
La función sql_api
espera un solo parametro:
sql:
La consulta SQL válida, que será enviada a la API SQL de CartoDB.
def sql_api(sql=None):
...
Ejemplo:
from app.ext.cartodb import sql_api
...
query = "SELECT cartodb_id, the_geom, latitude, longitude FROM awesome_dataset"
resp = sql_api(query)
if resp is None:
return Rest.response(400, HttpStatus.DEFAULT_ERROR_MESSAGE, resp)
else:
Rest.response(200, HttpStatus.OK, resp)
El resultado del ejemplo anterior:
{
"rows": [
{
"cartodb_id":582156,
"the_geom": "0103000020E610000001000000050000002FFF3F29308452C0F13E5909FCAF12402FFF3F16258452C0D866879889B012402FFFBF3A268452C055DEE957A9AF12402FFFBF91298452C0F126F7E276AF12402FFF3F29308452C0F13E5909FCAF1240",
"latitude":"4.36895",
"longitude":"-47.69842"
}
],
"time": 0.035,
"fields": {
"the_geom": {
"type": "geometry",
"wkbtype": "Unknown",
"dims": 2,
"srid": 4326
},
"cartodb_id": {
"type": "integer",
"pgtype": "text"
},
"latitude": {
"type": "float",
"pgtype": "text"
},
"longitude": {
"type": "float",
"pgtype": "text"
}
},
"total_rows": 1
}
la Api de CartoDB devuelve los resultados en un campo llamado rows,
si la consulta fue exitosa, de lo contrario, detalla el posible error en el campo error.
{
"error": [
"column \"latitud\" does not exist"
],
"hint": "Perhaps you meant to reference the column \"awesome_dataset.table_name\"."
}
# create_job
La función create_job
crea un trabajo de consultas por lotes (job) que le permite realizar operaciones sobre CartoDB, con tiempos de procesamiento de CPU de larga duración.
La función create_job
espera un solo parametro:
sql:
La consulta SQL válida, que será enviada a la API SQL de CartoDB.
def create_job(sql=None):
...
Ejemplo:
from app.ext.cartodb import create_job
...
query = "SELECT cartodb_id, the_geom, latitude, longitude FROM awesome_dataset"
resp = create_job(query)
if resp is None:
return Rest.response(400, HttpStatus.DEFAULT_ERROR_MESSAGE, resp)
else:
Rest.response(200, HttpStatus.OK, resp)
El resultado del ejemplo anterior:
{
"user": "awesome_cartodb_account",
"query": "SELECT cartodb_id, the_geom, latitude, longitude FROM awesome_dataset",
"job_id": "69c9d24d-62f6-4dbb-9836-712103e56841",
"created_at": "2020-07-09T18:25:17.412Z",
"updated_at": "2020-07-09T18:25:17.412Z",
"status": "pending"
}
la Api de Jobs de CartoDB devuelve el resultado del job, en los campos job_id
y status
si la consulta fue exitosa, de lo contrario, detalla el posible error en el campo failed_reason.
{
"user": "awesome_cartodb_account",
"status": "failed",
"query": "SELECT cartodb_id, the_geom, latitud, longitude FROM awesome_dataset",
"created_at": "2020-07-09T18:29:08.059Z",
"updated_at": "2020-07-09T18:29:08.074Z",
"failed_reason": "column \"latitud\" does not exist",
"job_id": "221683f2-2782-4x05-b810-1234aea790a2"
}
# get_job
La función get_job
devuelve el estado de un trabajo de consultas por lotes en función de su ID (job_id
)
La función get_job
espera un solo parametro:
job_id:
el Id del Job.
def get_job(job_id=None):
...
Ejemplo:
from app.ext.cartodb import get_job
...
job_id = "69c9d24d-62f6-4dbb-9836-712103e56841"
resp = get_job(job_id)
if resp is None:
return Rest.response(400, HttpStatus.DEFAULT_ERROR_MESSAGE, resp)
else:
Rest.response(200, HttpStatus.OK, resp)
El resultado del ejemplo anterior:
{
"user": "awesome_cartodb_account",
"status": "done",
"query": "SELECT cartodb_id, the_geom, latitude, longitude FROM awesome_dataset",
"created_at": "2020-07-09T18:25:17.412Z",
"updated_at": "2020-07-09T18:25:17.612Z",
"job_id": "69c9d24d-62f6-4dbb-9836-712103e56841"
}
la Api de Jobs de CartoDB devuelve el resultado del job, en los campos job_id
y status
si la consulta fue exitosa, de lo contrario, detalla el posible error en el campo failed_reason.
{
"user": "awesome_cartodb_account",
"status": "failed",
"query": "SELECT cartodb_id, the_geom, latitud, longitude FROM awesome_dataset",
"created_at": "2020-07-09T18:29:08.059Z",
"updated_at": "2020-07-09T18:29:08.074Z",
"failed_reason": "column \"latitud\" does not exist",
"job_id": "221683f2-2782-4x05-b810-1234aea790a2"
}
# Más información
Para mas información consulte:
- API SQL de CartoDB (opens new window)
- jobs en CartoDB (opens new window)
- La sección de issues (opens new window) del BackEndBase
← Mail FireBase FCM →