Python wrapper for the Salesforce's Query API.
Project description
sfq (Salesforce Query)
sfq is a lightweight Python wrapper library designed to simplify querying Salesforce, reducing repetitive code for accessing Salesforce data.
For more varied workflows, consider using an alternative like Simple Salesforce. This library was even referenced on the Salesforce Developers Blog.
Features
- Simplified query execution for Salesforce instances.
- Integration with Salesforce authentication via refresh tokens.
- Option to interact with Salesforce Tooling API for more advanced queries.
Installation
You can install the sfq library using pip:
pip install sfq
Usage
Library Querying
from sfq import SFAuth
# Initialize the SFAuth class with authentication details
sf = SFAuth(
instance_url="https://example-dev-ed.trailblaze.my.salesforce.com",
client_id="PlatformCLI",
refresh_token="your-refresh-token-here"
)
# Execute a query to fetch account records
print(sf.query("SELECT Id FROM Account LIMIT 5"))
# Execute a query to fetch Tooling API data
print(sf.query("SELECT Id, FullName, Metadata FROM SandboxSettings LIMIT 5", tooling=True))
Bash Querying
You can easily incorporate this into ad-hoc bash scripts or commands:
python -c "from sfq import SFAuth; sf = SFAuth(instance_url='$instance_url', client_id='$client_id', refresh_token='$refresh_token'); print(sf.query('$query'))" | jq -r '.records[].Id'
How to Obtain Salesforce Tokens
To use the sfq library, you'll need a client ID and refresh token. The easiest way to obtain these is by using the Salesforce CLI:
Steps to Get Tokens
-
Install the Salesforce CLI:
Follow the instructions on the Salesforce CLI installation page. -
Authenticate with Salesforce:
Login to your Salesforce org using the following command:sf org login web --alias int --instance-url https://corpa--int.sandbox.my.salesforce.com
-
Display Org Details:
To get the client ID, refresh token, and instance URL, run:sf org display --target-org int --verbose --json
The output will look like this:
{ "status": 0, "result": { "id": "00Daa0000000000000", "apiVersion": "63.0", "accessToken": "your-access-token-here", "instanceUrl": "https://example-dev-ed.trailblaze.my.salesforce.com", "username": "user@example.com", "clientId": "PlatformCLI", "connectedStatus": "Connected", "sfdxAuthUrl": "force://PlatformCLI::your-refresh-token-here::https://example-dev-ed.trailblaze.my.salesforce.com", "alias": "int" } }
-
Extract and Use the Tokens:
ThesfdxAuthUrlis structured as:force://<client_id>::<refresh_token>::<instance_url>You can extract and use the tokens in a bash script like this:
query="SELECT Id FROM User WHERE IsActive = true AND Profile.Name = 'System Administrator'" sfdxAuthUrl=$(sf org display --target-org int --verbose --json | jq -r '.result.sfdxAuthUrl' | sed 's/force:\/\///') clientId=$(echo "$sfdxAuthUrl" | sed 's/::/\n/g' | sed -n '1p') refreshToken=$(echo "$sfdxAuthUrl" | sed 's/::/\n/g' | sed -n '2p') instanceUrl=$(echo "$sfdxAuthUrl" | sed 's/::/\n/g' | sed -n '3p') pip install sfq && python -c "from sfq import SFAuth; sf = SFAuth(instance_url='$instanceUrl', client_id='$clientId', refresh_token='$refreshToken'); print(sf.query('$query'))" | jq -r '.records[].Id'
Important Considerations
- Security: Safeguard your refresh token diligently, as it provides access to your Salesforce environment. Avoid sharing or exposing it in unsecured locations.
- Efficient Data Retrieval: The
queryfunction automatically handles pagination, simplifying record retrieval across large datasets. It's recommended to use theLIMITclause in queries to control the volume of data returned. - Advanced Metadata Queries: Utilize the
tooling=Trueoption within thequeryfunction to access the Salesforce Tooling API. This option is designed for performing complex metadata operations, enhancing your data management capabilities.
Project details
Release history Release notifications | RSS feed
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 sfq-0.0.11.tar.gz.
File metadata
- Download URL: sfq-0.0.11.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c7ae76a5797d61a6e736297ed805293f8a39ae84432433c24fe79f54e9bc33f
|
|
| MD5 |
540ca4374509caff5b499c496b31acff
|
|
| BLAKE2b-256 |
3ee4c370fbb65b0fb0212fc59d9e9e18f1af1cd8bc6397fb4f006fdfdd60cef5
|
Provenance
The following attestation bundles were made for sfq-0.0.11.tar.gz:
Publisher:
publish.yml on dmoruzzi/sfq
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sfq-0.0.11.tar.gz -
Subject digest:
9c7ae76a5797d61a6e736297ed805293f8a39ae84432433c24fe79f54e9bc33f - Sigstore transparency entry: 206736076
- Sigstore integration time:
-
Permalink:
dmoruzzi/sfq@3d4a1355abde94d1585d339d73a32a3c3b2acd30 -
Branch / Tag:
refs/tags/0.0.11 - Owner: https://github.com/dmoruzzi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d4a1355abde94d1585d339d73a32a3c3b2acd30 -
Trigger Event:
release
-
Statement type:
File details
Details for the file sfq-0.0.11-py3-none-any.whl.
File metadata
- Download URL: sfq-0.0.11-py3-none-any.whl
- Upload date:
- Size: 9.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ae28f960f30532a88fff363f7d6638b67c5aeb8bf221fe85b9db802ea9af2e4
|
|
| MD5 |
26d5b1f42a65870538a90a8fc5d31683
|
|
| BLAKE2b-256 |
ddce47cbe71e5759132380db86950f8644fa890870497d0ae459927e46e33071
|
Provenance
The following attestation bundles were made for sfq-0.0.11-py3-none-any.whl:
Publisher:
publish.yml on dmoruzzi/sfq
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sfq-0.0.11-py3-none-any.whl -
Subject digest:
5ae28f960f30532a88fff363f7d6638b67c5aeb8bf221fe85b9db802ea9af2e4 - Sigstore transparency entry: 206736077
- Sigstore integration time:
-
Permalink:
dmoruzzi/sfq@3d4a1355abde94d1585d339d73a32a3c3b2acd30 -
Branch / Tag:
refs/tags/0.0.11 - Owner: https://github.com/dmoruzzi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3d4a1355abde94d1585d339d73a32a3c3b2acd30 -
Trigger Event:
release
-
Statement type: