{"id":21183,"library":"dune-client","title":"Dune Analytics Python Client","description":"Official Python SDK for the Dune Analytics API. Version 1.10.0 supports async/sync clients, direct SQL execution, Pipeline API, Uploads, and Datasets. Backward-incompatible changes include removal of from_env() and custom_endpoints.","status":"active","version":"1.10.0","language":"python","source_language":"en","source_url":"https://github.com/duneanalytics/dune-client","tags":["dune-analytics","api-client","web3","crypto","data"],"install":[{"cmd":"pip install dune-client","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"note":"DuneClient is in the client submodule, not top-level","wrong":"from dune_client import DuneClient","symbol":"DuneClient","correct":"from dune_client.client import DuneClient"},{"note":"","wrong":"","symbol":"AsyncDuneClient","correct":"from dune_client.async_client import AsyncDuneClient"}],"quickstart":{"code":"import os\nfrom dune_client.client import DuneClient\nfrom dune_client.types import QueryParameter\n\napi_key = os.environ.get(\"DUNE_API_KEY\", \"\")\nif not api_key:\n    raise ValueError(\"Set DUNE_API_KEY environment variable\")\n\nclient = DuneClient(api_key)\n# Execute a query by ID\nresult = client.get_latest_result(12345)\nprint(result)\n\n# Execute a query with parameters\nparams = [QueryParameter.text_type(name=\"network\", value=\"ethereum\")]\nresult = client.refresh(12345, params=params)\nprint(result)","lang":"python","description":"Initialize client with API key, fetch latest query result, and refresh a query with parameters."},"warnings":[{"fix":"Replace DuneClient.from_env() with DuneClient(os.getenv('DUNE_API_KEY'))","message":"from_env() classmethod removed in v1.8.0; use explicit DuneClient(api_key) instead.","severity":"breaking","affected_versions":">=1.8.0"},{"fix":"Set DUNE_API_BASE_URL env var, or use client = DuneClient(api_key, base_url='https://custom.api.dune.com')","message":"custom_endpoints parameter removed in v1.9.1; use environment variable DUNE_API_BASE_URL.","severity":"breaking","affected_versions":">=1.9.1"},{"fix":"Migrate to client.upload_csv() and client.create_dataset() per official docs.","message":"legacy Table API (create_table, insert_table, etc.) deprecated in v1.10.0; use Uploads and Datasets APIs.","severity":"deprecated","affected_versions":">=1.10.0"},{"fix":"Create a new DuneClient instance per process.","message":"DuneClient is thread-safe but not fork-safe; do not use with multiprocessing without reinitializing.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Generate API key at https://dune.com/settings/api","message":"API key must be from Dune Analytics (not Etherscan); use personal API key from https://dune.com/settings/api","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Use: from dune_client.client import DuneClient","cause":"DuneClient is in the client submodule.","error":"from dune_client import DuneClient\nImportError: cannot import name 'DuneClient' from 'dune_client'"},{"fix":"Use: DuneClient(os.getenv('DUNE_API_KEY'))","cause":"from_env() removed in v1.8.0.","error":"AttributeError: 'DuneClient' object has no attribute 'from_env'"},{"fix":"Set DUNE_API_KEY environment variable or pass key argument.","cause":"API key not provided or empty.","error":"dune_client.client.DuneAuthenticationError: API key not found"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}