diff --git a/.changes/unreleased/Features-20240731-210800.yaml b/.changes/unreleased/Features-20240731-210800.yaml
new file mode 100644
index 00000000..b2fc1f0a
--- /dev/null
+++ b/.changes/unreleased/Features-20240731-210800.yaml
@@ -0,0 +1,6 @@
+kind: Features
+body: Add support for Python 3.12
+time: 2024-07-31T21:08:00.170999-04:00
+custom:
+  Author: mikealfare
+  Issue: "17"
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
index 590f6f67..374908f4 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -82,7 +82,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11"]
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
 
     services:
       postgres:
@@ -148,7 +148,7 @@ jobs:
       fail-fast: false
       matrix:
         platform: [ubuntu-22.04, macos-12]
-        python-version: ["3.8", "3.11"]
+        python-version: ["3.8", "3.12"]
     steps:
       - name: "Check out repository"
         uses: actions/checkout@v4
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 1139380a..bbf36399 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,6 +19,10 @@ on:
         description: "Only release Docker image, skip GitHub & PyPI"
         type: boolean
         default: false
+      python_version:
+        description: "Python version for building and testing the build"
+        type: string
+        default: "3.12"
 
 permissions:
   contents: write # this is the permission that allows creating a new release
@@ -53,6 +57,8 @@ jobs:
 
       - name: "Setup `hatch`"
         uses: dbt-labs/dbt-adapters/.github/actions/setup-hatch@main
+        with:
+          python-version: ${{ inputs.python_version }}
 
       - name: "Set archive name"
         id: archive
diff --git a/.github/workflows/release_prep_hatch.yml b/.github/workflows/release_prep_hatch.yml
index a97268c6..18d7637b 100644
--- a/.github/workflows/release_prep_hatch.yml
+++ b/.github/workflows/release_prep_hatch.yml
@@ -77,7 +77,7 @@ defaults:
     shell: bash
 
 env:
-  PYTHON_TARGET_VERSION: 3.11
+  PYTHON_TARGET_VERSION: 3.12
   NOTIFICATION_PREFIX: "[Release Prep]"
 
 jobs:
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index e171ff78..afb88136 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -23,7 +23,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11"]
+        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
 
     steps:
       - name: Check out repository
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c869fe86..0bd01f7c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -27,6 +27,7 @@ repos:
         -   --target-version=py39
         -   --target-version=py310
         -   --target-version=py311
+        -   --target-version=py312
 
 -   repo: https://github.com/pycqa/flake8
     rev: 7.0.0
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 7c8dc14e..b6a87dfc 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -1,5 +1,5 @@
 # this image gets published to GHCR for production use
-ARG py_version=3.11.2
+ARG py_version=3.12.4
 
 FROM python:$py_version-slim-bullseye as base
 
diff --git a/pyproject.toml b/pyproject.toml
index 0fb7b885..e6848a4f 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -21,6 +21,7 @@ classifiers = [
     "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
 ]
 dependencies = [
     "psycopg2-binary>=2.9,<3.0",