A Python client library for interacting with the VizQL Data Service API
Project description
VizQL Data Service Python SDK
The VizQL Data Service Python SDK is a lightweight client library that enables interaction with Tableau's VizQL Data Service APIs. It supports both cloud and on-premises deployments, offering both synchronous and asynchronous methods for querying the VizQL Data Service APIs.
Consider reading VizQL Data Service in the following order:
- VizQL Data Service help documentation
- VizQL Data Service API Reference
- VizQL Data Service Postman collection
- VizQL Data Service OpenAPI Schema
Version Support
The VizQL Data Service Python SDK supports different versions of the VizQLDataServiceOpenAPISchema. Past versions of the schema corresponding to past releases of Tableau can be found in the release branches with name release-[year].[quarter]. As an example, release-20251.0 contains the VizQLDataServiceOpenAPISchema corresponding to 20251.0 (as a special note, the 20251.0 release uniquely does not have Python SDK support). release-20252.0 contains the schema corresponding to 20252.0 and the Python SDK that supports 20252.0. The main branch will always contain the most recent version of the VizQLDataServiceOpenAPISchema as well as the Python SDK that supports it.
Schema Versions
Python SDK Versions
None for 20251.0
🔧 Installation
python -m venv --system-site-packages venv # Optional command: set up a python virtual environment before installing the vizql_data_service_py package
source venv/bin/activate # A continuation of the first command for Unix/MacOS users. This activates the virtual environment for Unix/MacOS
venv\Scripts\activate # A continuation of the first command for Windows users. This activates the virtual environment for Windows
pip install vizql-data-service-py
🚀 Quick Start
Importing Required Modules
from vizql_data_service_py import (
ReadMetadataRequest,
QueryRequest,
Datasource,
Connection,
VizQLDataServiceClient,
read_metadata,
query_datasource,
DimensionField,
MeasureField,
Function,
Query
)
Setting Up Server Connection
To create Server and Auth instances, please refer to the Tableau Server Client (Python) Authentication Guide. For JWT authentication setup, see the Configure Connected Apps with Direct Trust documentation.
Note: Authentication methods vary between Tableau Cloud and On-premises deployments:
- Tableau Cloud: Supports JWT and Personal Access Token (PAT) authentication
- Tableau On-premises: Supports JWT, PAT, and username/password authentication
Configuring Data Source
# Create a data source instance with optional connection parameters
datasource = Datasource(
datasourceLuid="<datasource-luid>",
# Optional: Configure connections for external data sources
connections=[
Connection(
connectionUsername="<connection-username>",
connectionPassword="<connection-password>"
)
]
)
Sign in, Read Metadata and Query Data Sources
import tableauserverclient as TSC
# Choose one of these auth mechanisms
tableau_auth = TSC.PersonalAccessTokenAuth('TOKEN_NAME', 'TOKEN_VALUE', 'SITENAME')
# tableau_auth = TSC.TableauAuth('USERNAME', 'PASSWORD', 'SITENAME')
# tableau_auth = TSC.JWTAuth('JWT', 'SITENAME')
server_url = 'https://SERVER_URL'
server = TSC.Server(server_url)
with server.auth.sign_in(tableau_auth):
client = VizQLDataServiceClient(server_url, server, tableau_auth)
# Define your query fields
query = Query(
# Example: sample Superstore data source
# Aggregate SUM(Sales) by Category
fields=[
DimensionField(fieldCaption="Category"),
MeasureField(fieldCaption="Sales", function=Function.SUM),
]
)
# Step 1: Read metadata
read_metadata_request = ReadMetadataRequest(
datasource=datasource
)
read_metadata_response = read_metadata.sync(
client=client, body=read_metadata_request
)
print(f"Read Metadata Response: {read_metadata_response}")
# Step 2: Execute query
query_request = QueryRequest(
query=query, datasource=datasource
)
query_response = query_datasource.sync(
client=client, body=query_request
)
print(f"Query Datasource Response: {query_response}")
SSL Configuration
If you encounter SSL certificate verification errors (common in corporate environments with VPNs or custom certificates), you can configure SSL verification:
Options:
verify_ssl=True(default): Use system's default CA bundle for SSL verificationverify_ssl=False: Disable SSL verification entirelyverify_ssl="/path/to/ca-bundle.pem": Use custom CA bundle fileverify_ssl=ssl_context: Use custom SSL context for advanced configurations
# Disable SSL verification (for development/testing only)
client = VizQLDataServiceClient(server_url, server, tableau_auth, verify_ssl=False)
# Use custom CA bundle
client = VizQLDataServiceClient(server_url, server, tableau_auth, verify_ssl="/path/to/ca-bundle.pem")
# Use custom SSL context
import ssl
ssl_context = ssl.create_default_context()
# Load a custom CA bundle (e.g., for self-signed certificates)
ssl_context.load_verify_locations(cafile="/path/to/ca-bundle.pem")
# Or load client certificates for mutual TLS authentication
# ssl_context.load_cert_chain(certfile="path/to/your/client.pem", keyfile="path/to/your/client.key")
client = VizQLDataServiceClient(server_url, server, tableau_auth, verify_ssl=ssl_context)
Security Note: Only disable SSL verification (
verify_ssl=False) in development or testing environments. For production, use proper SSL certificates or custom CA bundles.
API Methods
The SDK provides two ways to make API calls:
# Simple way - just get the response data
response = read_metadata.sync(client=client, body=read_metadata_request)
# Detailed way - get response data, status code and headers
response, status, headers = read_metadata.sync_detailed(client=client, body=read_metadata_request)
Both methods work for read_metadata and query_datasource. Use sync_detailed() when you need HTTP response details like status code and headers.
This SDK is built using datamodel-codegen to generate all VizQL Data Service models based on Pydantic v2. For detailed API documentation and model specifications, please refer to the VizQLDataServiceOpenAPISchema.json file.
Note: While raw JSON requests are supported, we strongly recommend using the provided Python pydantic v2 objects to construct requests. This approach offers several advantages:
- Type safety and validation at compile time
- Better IDE support with autocompletion
- Consistent request structure
- Easier maintenance and debugging
For comprehensive examples demonstrating various query patterns and filter combinations, please check the examples directory.
📘 Supported Features
- ✅ Read metadata of Tableau published datasources
- ✅ Query published datasources with selectable fields and queries supports various filters
- ✅ Synchronous and Asynchronous Python client support
- ✅ Authentication using Tableau username/password, JWT or PAT
- ✅ Works with both Tableau Cloud and Tableau Server (on-prem)
- ✅ OpenAPI schema generated Python Pydantic v2 models for type-safe API interactions
🛠️ Requirements
- Python 3.9+
- pip 20.0+
- Tableau Server 2025.1+ or Tableau Cloud
🤝 Contributing
To contribute, see our CONTRIBUTING.md Guide. A list of all our contributors to date is in CONTRIBUTORS.md.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vizql_data_service_py-20261.0.0.tar.gz.
File metadata
- Download URL: vizql_data_service_py-20261.0.0.tar.gz
- Upload date:
- Size: 32.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed0d2292ebb6eb8b43344d8ef1b8925b7b0084d05b472579920ad4e268620854
|
|
| MD5 |
e921c7a96702a84a1389d55381d23bbf
|
|
| BLAKE2b-256 |
fb648cde89c8569bc6ae429dd50a0c180663c42f81230ab7789330eb8d1bd6c5
|
Provenance
The following attestation bundles were made for vizql_data_service_py-20261.0.0.tar.gz:
Publisher:
push.yml on tableau/VizQL-Data-Service
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vizql_data_service_py-20261.0.0.tar.gz -
Subject digest:
ed0d2292ebb6eb8b43344d8ef1b8925b7b0084d05b472579920ad4e268620854 - Sigstore transparency entry: 770106167
- Sigstore integration time:
-
Permalink:
tableau/VizQL-Data-Service@f8c3adb4fc41ae75a43981b5ba1fe47fc3b6edb5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tableau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
push.yml@f8c3adb4fc41ae75a43981b5ba1fe47fc3b6edb5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vizql_data_service_py-20261.0.0-py3-none-any.whl.
File metadata
- Download URL: vizql_data_service_py-20261.0.0-py3-none-any.whl
- Upload date:
- Size: 34.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94e9ba9616b1e39d37024901b79a09be6369efe55f91ad784c0e281067f4f0ff
|
|
| MD5 |
f5faabb85d176e7485533813fb610062
|
|
| BLAKE2b-256 |
dc76349dd2ce2d3fa94e8c8e920fca640e1ae393431e8d1eea6b76a09494b2d2
|
Provenance
The following attestation bundles were made for vizql_data_service_py-20261.0.0-py3-none-any.whl:
Publisher:
push.yml on tableau/VizQL-Data-Service
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vizql_data_service_py-20261.0.0-py3-none-any.whl -
Subject digest:
94e9ba9616b1e39d37024901b79a09be6369efe55f91ad784c0e281067f4f0ff - Sigstore transparency entry: 770106191
- Sigstore integration time:
-
Permalink:
tableau/VizQL-Data-Service@f8c3adb4fc41ae75a43981b5ba1fe47fc3b6edb5 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/tableau
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
push.yml@f8c3adb4fc41ae75a43981b5ba1fe47fc3b6edb5 -
Trigger Event:
push
-
Statement type: