How to query records from Skygear database using Python?


#1

I have a Python client script and was trying to fetch the records from my Skygear server database. Seems like the latest py-skygear on git already has this supported and so I installed it through git:

pip install sphinx
pip install -U git+https://github.com/SkygearIO/py-skygear.git

So I tried to connect and query my table called “testing” on the database using this script (with pip installed all packages needed and environment variables saved in .env file):

import os
from os.path import join, dirname
from dotenv import load_dotenv

from skygear.container import SkygearContainer
from skygear.transmitter import HttpTransport
from skygear.models import Record, RecordID
from skygear.query import Query


# load environment variables
dotenv_path = join(dirname(__file__), ".env")
load_dotenv(dotenv_path)

# connect to skygear database
endpoint = os.environ.get('SKYGEAR_ENDPOINT', None)
master_key = os.environ.get('SKYGEAR_MASTER_KEY', None)
http_transport = HttpTransport(addr=endpoint)
container = SkygearContainer(endpoint=endpoint, api_key=master_key, transport=http_transport)
database = container.public_database

# query table with record_type (table name) "books" from database
query = Query('books')
result = database.query(query)

However it shows me this piece of error:

Traceback (most recent call last):
  File "tmp.py", line 23, in <module>
    result = database.query(query)
  File "/Users/joyz/myproject/env/lib/python3.6/site-packages/skygear/database.py", line 117, in query
    result = self.container.send_action('record:query', payload)
  File "/Users/joyz/myproject/env/lib/python3.6/site-packages/skygear/container.py", line 117, in send_action
    resp = self.transport.send_action(action_name, payload, url, timeout)
  File "/Users/joyz/myproject/env/lib/python3.6/site-packages/skygear/transmitter/http.py", line 140, in send_action
    raise error.SkygearException.from_dict(resp['error'])
skygear.error.SkygearException: failed to construct query: got len(predicate) = 0, want at least 2

Did I misuse the query function or is it a must to set the predicate for it?