How to use SQLAlchemy ORM to access Webflow Data in Python

Jerod Johnson
Jerod Johnson
Director, Technology Evangelism
Create Python applications and scripts that use SQLAlchemy Object-Relational Mappings of Webflow data.

The rich ecosystem of Python modules lets you get to work quickly and integrate your systems effectively. With the CData API Driver for Python and the SQLAlchemy toolkit, you can build Webflow-connected Python applications and scripts. This article shows how to use SQLAlchemy to connect to Webflow data to query Webflow data.

With built-in optimized data processing, the CData Python Connector offers unmatched performance for interacting with live Webflow data in Python. When you issue complex SQL queries from Webflow, the CData Connector pushes supported SQL operations, like filters and aggregations, directly to Webflow and utilizes the embedded SQL engine to process unsupported operations client-side (often SQL functions and JOIN operations).

Connecting to Webflow Data

Connecting to Webflow data looks just like connecting to any relational data source. Create a connection string using the required connection properties. For this article, you will pass the connection string as a parameter to the create_engine function.

Authentication

Webflow uses OAuth 2.0 authentication to ensure secure access to sites, CMS collections, e-commerce data, and other resources. This authentication method allows you to securely connect to your Webflow workspace and manage resources with proper authorization.

OAuth 2.0 Setup and Configuration

Step 1: Create a Webflow OAuth Application

To set up OAuth authentication:

  1. Visit the Webflow Developer Portal
  2. Navigate to "Apps & Integrations" in your Webflow account
  3. Click "Register an App" to create a new OAuth application
  4. Configure the application name, description, and redirect URI (CallbackURL)
  5. Copy the Client ID and Client Secret for use in your connection

Required Connection Properties

  • AuthScheme: Set this to OAuth (required)
  • OAuthClientId: Client ID from your Webflow OAuth application (required)
  • OAuthClientSecret: Client secret from your Webflow OAuth application (required)
  • CallbackURL: Redirect URI specified in your OAuth application (required)
  • InitiateOAuth: Set to GETANDREFRESH for automatic token management (recommended)

Required OAuth Scopes

The Webflow API Profile requires the following OAuth scopes:

  • sites:read - Read access to site information and configuration
  • pages:read - Read access to site pages
  • cms:read - Read access to CMS collections and items
  • forms:read - Read access to forms and form submissions
  • assets:read - Read access to media assets and folders
  • ecommerce:read - Read access to products, orders, and inventory
  • authorized_user:read - Read access to the authorized user

Follow the procedure below to install SQLAlchemy and start accessing Webflow through Python objects.

Install Required Modules

Use the pip utility to install the SQLAlchemy toolkit and SQLAlchemy ORM package:

pip install sqlalchemy
pip install sqlalchemy.orm

Be sure to import the appropriate modules:

from sqlalchemy import create_engine, String, Column
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Model Webflow Data in Python

You can now connect with a connection string. Use the create_engine function to create an Engine for working with Webflow data.

NOTE: Users should URL encode the any connection string properties that include special characters. For more information, refer to the SQL Alchemy documentation.

engine = create_engine("api:///?Profile=C:\profiles\Webflow.apip&AuthScheme=OAuth&InitiateOAuth=GETANDREFRESH&OAuthClientId=your_client_id&OAuthClientSecret=your_client_secret&CallbackUrl=your_callback_url")

Declare a Mapping Class for Webflow Data

After establishing the connection, declare a mapping class for the table you wish to model in the ORM (in this article, we will model the Sites table). Use the sqlalchemy.ext.declarative.declarative_base function and create a new class with some or all of the fields (columns) defined.

base = declarative_base()
class Sites(base):
	__tablename__ = "Sites"
	 = Column(String,primary_key=True)
	 = Column(String)
	...

Query Webflow Data

With the mapping class prepared, you can use a session object to query the data source. After binding the Engine to the session, provide the mapping class to the session query method.

Using the query Method

engine = create_engine("api:///?Profile=C:\profiles\Webflow.apip&AuthScheme=OAuth&InitiateOAuth=GETANDREFRESH&OAuthClientId=your_client_id&OAuthClientSecret=your_client_secret&CallbackUrl=your_callback_url")
factory = sessionmaker(bind=engine)
session = factory()
for instance in session.query(Sites).filter_by(Id="your_site_id"):
	print(": ", instance.)
	print(": ", instance.)
	print("---------")

Alternatively, you can use the execute method with the appropriate table object. The code below works with an active session.

Using the execute Method

Sites_table = Sites.metadata.tables["Sites"]
for instance in session.execute(Sites_table.select().where(Sites_table.c.Id == "your_site_id")):
	print(": ", instance.)
	print(": ", instance.)
	print("---------")

For examples of more complex querying, including JOINs, aggregations, limits, and more, refer to the Help documentation for the extension.

Free Trial & More Information

Download a free, 30-day trial of the CData API Driver for Python to start building Python apps and scripts with connectivity to Webflow data. Reach out to our Support Team if you have any questions.

Ready to get started?

Connect to live data from Webflow with the API Driver

Connect to Webflow