Skip to content

Toggle navigation Sign in

Search or jump toโ€ฆ

Search code, repositories, users, issues, pull requestsโ€ฆ

Search Clear Search syntax tips

Provide feedback

We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback

Saved searches

Use saved searches to filter your results more quickly

Name Query To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} supabase / **supabase-py ** Public

Python Client for Supabase. Query Postgres from Flask, Django, FastAPI. Python user authentication, security policies, edge functions, file storage, and realtime data streaming. Good first issue. supabase.com/docs/reference/python

License

MIT license 1.8k stars 220 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings

Additional navigation options

supabase/supabase-py

main BranchesTags Go to file Code

Folders and files

NameNameLast commit messageLast commit date

supabase-py

Python client for Supabase

Set up a Local Development Environment

Clone the Repository

git clone https://github.com/supabase/supabase-py.git
cd supabase-py

Create and Activate a Virtual Environment

We recommend activating your virtual environment. For example, we like poetry and conda! Click here for more about Python virtual environments and working with conda and poetry. Using venv (Python 3 built-in):

python3 -m venv env
source env/bin/activate # On Windows, use .\env\Scripts\activate

Using conda:

conda create --name supabase-py
conda activate supabase-py

PyPi installation

Install the package (for Python >= 3.9):

# with pip
pip install supabase
# with conda
conda install -c conda-forge supabase

Local installation

You can also install locally after cloning this repo. Install Development mode with pip install -e, which makes it editable, so when you edit the source code the changes will be reflected in your python module.

Usage

Set your Supabase environment variables in a dotenv file, or using the shell:

export SUPABASE_URL="my-url-to-my-awesome-supabase-instance"
export SUPABASE_KEY="my-supa-dupa-secret-supabase-api-key"

Init client:

import os
from supabase import create_client, Client
url: str = os.environ.get("SUPABASE_URL")
key: str = os.environ.get("SUPABASE_KEY")
supabase: Client = create_client(url, key)

Use the supabase client to interface with your database.

Sign-up

user = supabase.auth.sign_up({ "email": users_email, "password": users_password })

Sign-in

user = supabase.auth.sign_in_with_password({ "email": users_email, "password": users_password })

Insert Data

data = supabase.table("countries").insert({"name":"Germany"}).execute()
# Assert we pulled real data.
assert len(data.data) > 0

Select Data

data = supabase.table("countries").select("*").eq("country", "IL").execute()
# Assert we pulled real data.
assert len(data.data) > 0

Update Data

data = supabase.table("countries").update({"country": "Indonesia", "capital_city": "Jakarta"}).eq("id", 1).execute()

Update data with duplicate keys

country = {
 "country": "United Kingdom",
 "capital_city": "London" # This was missing when it was added
}
data = supabase.table("countries").upsert(country).execute()
assert len(data.data) > 0

Delete Data

data = supabase.table("countries").delete().eq("id", 1).execute()

Call Edge Functions

def test_func():
 try:
  resp = supabase.functions.invoke("hello-world", invoke_options={'body':{}})
  return resp
 except (FunctionsRelayError, FunctionsHttpError) as exception:
  err = exception.to_dict()
  print(err.get("message"))

Download a file from Storage

bucket_name: str = "photos"
data = supabase.storage.from_(bucket_name).download("photo1.png")

Upload a file

bucket_name: str = "photos"
new_file = getUserFile()
data = supabase.storage.from_(bucket_name).upload("/user1/profile.png", new_file)

Remove a file

bucket_name: str = "photos"
data = supabase.storage.from_(bucket_name).remove(["old_photo.png", "image5.jpg"])

List all files

bucket_name: str = "charts"
data = supabase.storage.from_(bucket_name).list()

Move and rename files

bucket_name: str = "charts"
old_file_path: str = "generic/graph1.png"
new_file_path: str = "important/revenue.png"
data = supabase.storage.from_(bucket_name).move(old_file_path, new_file_path)

Roadmap

  • Wrap Postgrest-py
    • Add remaining filters
    • Add support for EXPLAIN
    • Add proper error handling
    • Use sanitize_param() to sanitize inputs.
    • Fix client-side timeouts for long running queries.
    • Enable HTTP2 by default.
    • Enable follow redirects by default.
    • Enable keep-alive by default.
    • Enable running with unverified SSL via verify=False.
    • Add Stalebot.
    • Update CI (linters, etc).
    • Check cyclomatic complexity and fix if needed (mccabe, prospector).
  • Wrap Realtime-py
    • Integrate with Supabase-py
    • Support WALRUS
    • Support broadcast (to check if already supported)
    • Add close() method to close a socket.
    • Add Stalebot.
    • Update CI (linters, etc).
    • Check cyclomatic complexity and fix if needed (mccabe, prospector).
  • Wrap auth-py
    • Remove references to GoTrue-js v1 and do a proper release
    • Test and document common flows (e.g. sign in with OAuth, sign in with OTP)
    • Add MFA methods
    • Add SSO methods
    • Add Proof Key for Code Exchange (PKCE) methods. Unlike the JS library, we do not currently plan to support Magic Link (PKCE). Please use the token hash in tandem with verifyOTP instead.
    • Add is_anonymous boolean property.
    • Add sign_in_with_id_token() method.
    • Add sign_in_with_sso() method.
    • Enable HTTP2 by default.
    • Enable follow redirects by default.
    • Enable keep-alive by default.
    • Enable running with unverified SSL via verify=False.
    • Add Stalebot.
    • Update CI (linters, etc).
    • Check cyclomatic complexity and fix if needed (mccabe, prospector).
  • Wrap storage-py
    • Support resumable uploads
    • Setup testing environment
    • Fix client-side timeouts for long running operations.
    • Enable HTTP2 by default.
    • Enable follow redirects by default.
    • Enable keep-alive by default.
    • Enable running with unverified SSL via verify=False.
    • Add Stalebot.
    • Update CI (linters, etc).
    • Check cyclomatic complexity and fix if needed (mccabe, prospector).
    • Document how to properly upload different file types (e.g. jpeg/png and download it)
  • Wrap functions-py
    • Fix client-side timeouts for long running functions.
    • Enable HTTP2 by default.
    • Enable follow redirects by default.
    • Enable keep-alive by default.
    • Enable running with unverified SSL via verify=False.
    • Add Regions support.
    • Add Stalebot.
    • Update CI (linters, etc).
    • Check cyclomatic complexity and fix if needed (mccabe, prospector).

Overall Tasks

  • Add async support across the entire library
  • Add FastAPI helper library (external to supabase-py)
  • Add django-supabase-postgrest (external to supabase-py)

Contributing

Contributing to the Python libraries are a great way to get involved with the Supabase community. Reach out to us on Discord or on our Github Discussions page if you want to get involved.

Running Tests

Currently, the test suites are in a state of flux. We are expanding our clientsโ€™ tests to ensure things are working, and for now can connect to this test instance, which is populated with the following table: The above test database is a blank supabase instance that has populated the countries table with the built-in countries script that can be found in the supabase UI. You can launch the test scripts and point to the above test database by running

./test.sh

Badges

License: MIT CI Python Version Codecov Last commit GitHub commit activity Github Stars Github Forks Github Watchers GitHub contributors

About

Python Client for Supabase. Query Postgres from Flask, Django, FastAPI. Python user authentication, security policies, edge functions, file storage, and realtime data streaming. Good first issue. supabase.com/docs/reference/python

Topics

python community flask postgres data-science machine-learning django authentication postgresql databases auth authorization good-first-issue fastapi supabase

Resources

Readme

License

MIT license

Code of conduct

Code of conduct Activity Custom properties

Stars

1.8k stars

Watchers

47 watching

Forks

220 forks Report repository

Releases 70

v2.11.0 Latest Dec 30, 2024 + 69 releases

Sponsor Learn more about GitHub Sponsors

Contributors 65

+ 51 contributors

Languages

ยฉ 2025 GitHub, Inc.

You canโ€™t perform that action at this time.