{"library":"prefect-sqlalchemy","title":"Prefect SQLAlchemy Integration","description":"The `prefect-sqlalchemy` library provides integrations for working with databases within Prefect flows. It allows users to connect to various SQL databases using SQLAlchemy, enabling orchestration and observability of database operations. The library offers `SqlAlchemyConnector` and `AsyncSqlAlchemyConnector` for managing both synchronous and asynchronous database connections. This integration is actively maintained, with releases often aligning with the frequent release cadence of the core Prefect library.","language":"python","status":"active","last_verified":"Fri May 15","install":{"commands":["pip install prefect-sqlalchemy","pip install \"prefect[sqlalchemy]\""],"cli":null},"imports":["from prefect_sqlalchemy import SqlAlchemyConnector","from prefect_sqlalchemy import AsyncSqlAlchemyConnector","from prefect_sqlalchemy import ConnectionComponents","from prefect_sqlalchemy import SyncDriver","from prefect_sqlalchemy import AsyncDriver","from prefect_sqlalchemy import SqlAlchemyConnector"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom prefect import flow, task\nfrom prefect_sqlalchemy import SqlAlchemyConnector, ConnectionComponents, SyncDriver\n\n@task\ndef setup_table(block_name: str) -> None:\n    \"\"\"Sets up a table and inserts data using the SQLAlchemy connector.\"\"\"\n    with SqlAlchemyConnector.load(block_name) as connector:\n        connector.execute(\n            \"CREATE TABLE IF NOT EXISTS customers (name varchar, address varchar);\"\n        )\n        connector.execute(\n            \"INSERT INTO customers (name, address) VALUES (:name, :address);\",\n            parameters={\"name\": \"Marvin\", \"address\": \"Highway 42\"},\n        )\n        connector.execute_many(\n            \"INSERT INTO customers (name, address) VALUES (:name, :address);\",\n            seq_of_parameters=[\n                {\"name\": \"Ford\", \"address\": \"Highway 42\"},\n                {\"name\": \"Unknown\", \"address\": \"Highway 42\"},\n            ],\n        )\n\n@task\ndef fetch_data(block_name: str) -> list:\n    \"\"\"Fetches all data from the customers table.\"\"\"\n    all_rows = []\n    with SqlAlchemyConnector.load(block_name) as connector:\n        while True:\n            new_rows = connector.fetch_many(\"SELECT * FROM customers\", size=2)\n            if len(new_rows) == 0:\n                break\n            all_rows.extend(new_rows)\n    return all_rows\n\n@flow(name=\"SQLAlchemy Flow Example\")\ndef sqlalchemy_flow(block_name: str) -> list:\n    \"\"\"Orchestrates database setup and data fetching.\"\"\"\n    setup_table(block_name)\n    all_rows = fetch_data(block_name)\n    return all_rows\n\nif __name__ == \"__main__\":\n    # --- Configuration and Block Saving (Run this once to create the block) ---\n    # In a real scenario, use environment variables for sensitive info.\n    # Replace 'my-sqlite-block' with your desired block name.\n    # For SQLite, a file-based database is sufficient.\n    sqlite_block_name = os.environ.get('PREFECT_SQL_BLOCK_NAME', 'my-sqlite-block')\n    sqlite_db_path = os.environ.get('SQLITE_DB_PATH', 'prefect.db')\n\n    # Create and save the connector block programmatically\n    # (Alternatively, create it via the Prefect UI)\n    connector = SqlAlchemyConnector(\n        connection_info=ConnectionComponents(\n            driver=SyncDriver.SQLITE_PYSQLITE,\n            database=sqlite_db_path\n        )\n    )\n    connector.save(sqlite_block_name)\n    print(f\"Saved SqlAlchemyConnector block as '{sqlite_block_name}' pointing to '{sqlite_db_path}'\")\n    print(\"You can now run the flow using this block.\")\n\n    # --- Running the Flow ---\n    # Ensure the block 'my-sqlite-block' exists in your Prefect server/Cloud.\n    results = sqlalchemy_flow(sqlite_block_name)\n    print(\"Fetched Data:\", results)\n","lang":"python","description":"This quickstart demonstrates how to set up an `SqlAlchemyConnector` block, save it to Prefect, and then use it within Prefect tasks and a flow to interact with a SQLite database. It includes creating a table, inserting data, and fetching results. Remember to run the block saving part first, or configure your block via the Prefect UI, before executing the flow.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-15","installed_version":"0.5.3","pypi_latest":"0.6.1","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":20.9,"avg_import_s":5.51,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.22,"mem_mb":63.3,"disk_size":"247.1M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.22,"mem_mb":63.3,"disk_size":"247.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":23.1,"import_time_s":5.28,"mem_mb":63.3,"disk_size":"248M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.7,"import_time_s":5.26,"mem_mb":63.3,"disk_size":"248M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.51,"mem_mb":68.5,"disk_size":"268.7M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":6.5,"mem_mb":68.5,"disk_size":"268.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.1,"import_time_s":5.88,"mem_mb":68.5,"disk_size":"270M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":22.2,"import_time_s":6.01,"mem_mb":68.5,"disk_size":"270M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.71,"mem_mb":67,"disk_size":"258.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.82,"mem_mb":67,"disk_size":"258.1M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":17.7,"import_time_s":5.98,"mem_mb":67,"disk_size":"259M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":17.7,"import_time_s":5.85,"mem_mb":67.1,"disk_size":"259M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.36,"mem_mb":67.5,"disk_size":"255.4M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":5.36,"mem_mb":67.5,"disk_size":"255.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":17.6,"import_time_s":5.52,"mem_mb":67.5,"disk_size":"257M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":17.6,"import_time_s":5.54,"mem_mb":67.5,"disk_size":"257M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.48,"mem_mb":62.7,"disk_size":"179.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":4.59,"mem_mb":62.7,"disk_size":"179.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":24.3,"import_time_s":4.12,"mem_mb":62.7,"disk_size":"180M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"prefect-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":23.6,"import_time_s":4.01,"mem_mb":62.7,"disk_size":"180M"}]}}