Surreal DB with Python wrapper for surrealdb.py which makes it easy to write SurrealQL queries in Python.
Install with:
pip install sirqle
Usage:
from sirqle.query import Config, Query
config = Config(
url = "localhost:8000",
namespace = "test",
database = "test",
username = "test",
password = "test",
)
my_query = Query(config=config)
table_name = "person"
cont = {
"name": "Tobie",
"company": "SurrealDB",
"skills": ["Rust", "Go", "JavaScript"],
}
my_query.create(table_name).content(cont)
response = await my_query.execute()
# the result
response = [{'company': 'SurrealDB', 'id': 'person:it2e579rij23zu0iswk4', 'name': 'Tobie', 'skills': ['Rust', 'Go', 'JavaScript']}]
The Config
class is used to configure the connection the database. It uses the SurrealHTTP
client and requires the following arguments depending on the desired method:
- Manually enter the parameters
url
: URL of the databasenamespace
: The namespace of the databasedatabase
: The name of the databaseusername
: The access usernamepassword
: The access password
- Pass a previous defined client
client
: anSurrealHTTP
client fromsurrealdb.py
- Load the parameters from a file
env_file
: the name of the env file. Defaults to.db_conf
.
The Query module aims to extend the standard SurrealQL and make it more Python friendly. Internally it constructs a SurrealQL string from method chaining and sends the query to the database.
query = Query(config)
Create a new entry:
CREATE person CONTENT {
name: 'Tobie',
company: 'SurrealDB',
skills: ['Rust', 'Go', 'JavaScript']
};
becomes
table_name = "person"
cont = {
"name": "Tobie",
"company": "SurrealDB",
"skills": ["Rust", "Go", "JavaScript"],
}
create_query.create(table_name).content(cont)
INSERT INTO person (name, company, founded) VALUES ('John', 'SurrealDB', '2021-09-10');
becomes
table_name = "person (name, company, founded)"
data = tuple(["John", "SurrealDB", "2021-09-10"])
insert_query.insert(table_name, values=data)
SELECT * FROM person;
becomes
query.select("*").from_("person")
Execution
To execute the query run res = await query.execute()
, where res
is the result of the query.
If you need something more complex than the basic operations, you can directly pass an SurrealQL query as a string:
This query creates a temporary entry in the table
Topic
where we hash the values oftopic_label
andtopic_source
, returns the hash value and then delete the table.
table_name = "Topic"
topic_label = "SurrealDB is awesome"
topic_source = "My personal knowledge"
my_query.custom( f"create {table_name} content"
+ f" {{words: {topic_label}, source: {topic_source}}}"
+ f" return crypto::md5(string::concat($this.words, $this.source));"
+ f" delete from {table_name};")
response = await my_query.execute()
response = {"crypto::md5": "8f23a9630e18d525946740e5498798be"}