Skip to content

Commit 0578771

Browse files
authored
Expand on README quickstart (#93)
* update and expand to show off some sweet features
1 parent 2f0b384 commit 0578771

File tree

1 file changed

+72
-4
lines changed

1 file changed

+72
-4
lines changed

README.md

Lines changed: 72 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ pip install dune-client
1818

1919
# Example Usage
2020

21+
## Quickstart: run_sql
22+
2123
Export your `DUNE_API_KEY` (or place it in a `.env` file - as in
2224
here [.env.sample](./.env.sample) and `source .env`).
2325

@@ -39,16 +41,82 @@ query = QueryBase(
3941
print("Results available at", query.url())
4042

4143
dune = DuneClient.from_env()
42-
results = dune.refresh(query)
44+
results = dune.run_query(query)
45+
46+
# or as CSV
47+
# results_csv = dune.run_query_csv(query)
48+
49+
# or as Pandas Dataframe
50+
# results_df = dune.run_query_dataframe(query)
4351
```
4452

45-
For a more elaborate example,
46-
visit [dune-alerts](https://github.com/cowprotocol/dune-alerts)
53+
## Further Examples
54+
55+
### Get Latest Results
56+
Use `get_latest_results` to get the most recent query results without using execution credits.
57+
You can specify a `max_age_hours` to re-run the query if the data is too outdated.
58+
59+
```python
60+
from dune_client.client import DuneClient
61+
62+
dune = DuneClient.from_env()
63+
results = dune.get_latest_result(1215383, max_age_hours=8)
64+
```
65+
66+
## Paid Subscription Features
67+
68+
### CRUD Operations
69+
70+
If you're writing scripts that rely on Dune query results and want to ensure that your local,
71+
peer-reviewed, queries are being used at runtime, you can call `update_query` before `run_query`!
72+
73+
Here is a fictitious example making use of this functionality;
74+
75+
```python
76+
from dune_client.types import QueryParameter
77+
from dune_client.client import DuneClient
78+
79+
sql = """
80+
SELECT block_time, hash,
81+
FROM ethereum.transactions
82+
ORDER BY CAST(gas_used as uint256) * CAST(gas_price AS uint256) DESC
83+
LIMIT {{N}}
84+
"""
85+
86+
dune = DuneClient.from_env()
87+
query = dune.create_query(
88+
name="Top {N} Most Expensive Transactions on Ethereum",
89+
query_sql=sql,
90+
# Optional fields
91+
params=[QueryParameter.number_type(name="N", value=10)],
92+
is_private=False # default
93+
)
94+
query_id = query.base.query_id
95+
print(f"Created query with id {query.base.query_id}")
96+
# Could retrieve using
97+
# dune.get_query(query_id)
98+
99+
dune.update_query(
100+
query_id,
101+
# All parameters below are optional
102+
name="Top {N} Most Expensive Transactions on {Blockchain}",
103+
query_sql=sql.replace("ethereum", "{{Blockchain}}"),
104+
params=query.base.parameters() + [QueryParameter.text_type("Blockchain", "ethereum")],
105+
description="Shows time and hash of the most expensive transactions",
106+
tags=["XP€N$IV $H1T"]
107+
)
108+
109+
dune.archive_query(query_id)
110+
dune.unarchive_query(query_id)
111+
112+
dune.make_private(query_id)
113+
dune.make_public(query_id)
114+
```
47115

48116
# Developer Usage & Deployment
49117

50118
## Makefile
51-
This project's makefile comes equiped with sufficient commands for local development.
119+
This project's makefile comes equipped with sufficient commands for local development.
52120

53121
### Installation
54122

0 commit comments

Comments
 (0)