{"library":"sqlalchemy-utils","title":"SQLAlchemy-Utils","type":"library","description":"SQLAlchemy-Utils is a library that provides various utility functions, new data types, and helpers for SQLAlchemy. It extends SQLAlchemy's functionality by offering additional features to simplify common database tasks like managing database existence, custom column types (e.g., ChoiceType, UUIDType, EmailType), and ORM helpers. The library is actively maintained with frequent updates, typically a few minor releases per year, and is currently at version 0.42.1.","language":"python","status":"active","last_verified":"Tue May 19","install":{"commands":["pip install sqlalchemy-utils"],"cli":null},"imports":["from sqlalchemy_utils import database_exists","from sqlalchemy_utils import create_database","from sqlalchemy_utils import drop_database","from sqlalchemy_utils import ChoiceType","from sqlalchemy_utils import Timestamp","from sqlalchemy_utils import generic_repr"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":"https://sqlalchemy-utils.readthedocs.io","github":"https://github.com/kvesteri/sqlalchemy-utils","docs":null,"changelog":null,"pypi":"https://pypi.org/project/sqlalchemy-utils/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import os\nfrom sqlalchemy import create_engine, Column, Integer, String\nfrom sqlalchemy.orm import declarative_base, sessionmaker\nfrom sqlalchemy_utils import database_exists, create_database, drop_database, ChoiceType\n\n# --- Database Setup ---\nDB_USER = os.environ.get('DB_USER', 'testuser')\nDB_PASS = os.environ.get('DB_PASS', 'testpass')\nDB_HOST = os.environ.get('DB_HOST', 'localhost')\nDB_NAME = os.environ.get('DB_NAME', 'test_db')\nDATABASE_URL = f\"postgresql://{DB_USER}:{DB_PASS}@{DB_HOST}/{DB_NAME}\"\n\nengine = create_engine(DATABASE_URL)\n\n# Create database if it doesn't exist\nif not database_exists(engine.url):\n    create_database(engine.url)\n    print(f\"Database '{DB_NAME}' created.\")\nelse:\n    print(f\"Database '{DB_NAME}' already exists.\")\n\nSession = sessionmaker(bind=engine)\nBase = declarative_base()\n\n# --- Define a Model with ChoiceType ---\nclass TaskPriority:\n    LOW = 'low'\n    MEDIUM = 'medium'\n    HIGH = 'high'\n\nclass Task(Base):\n    __tablename__ = 'tasks'\n\n    id = Column(Integer, primary_key=True)\n    name = Column(String(50), nullable=False)\n    priority = Column(ChoiceType(TaskPriority, impl=String(10)))\n\n    def __repr__(self):\n        return f\"<Task(id={self.id}, name='{self.name}', priority='{self.priority}')>\"\n\n# --- ORM Operations ---\nBase.metadata.create_all(engine) # Create tables\n\nsession = Session()\n\n# Add tasks\ntask1 = Task(name=\"Write documentation\", priority=TaskPriority.HIGH)\ntask2 = Task(name=\"Review code\", priority=TaskPriority.MEDIUM)\ntask3 = Task(name=\"Deploy update\", priority=TaskPriority.LOW)\n\nsession.add_all([task1, task2, task3])\nsession.commit()\n\n# Query tasks\nprint(\"\\nAll tasks:\")\nfor task in session.query(Task).all():\n    print(task)\n\n# Clean up (optional: uncomment to drop the database)\n# session.close()\n# drop_database(engine.url)\n# print(f\"Database '{DB_NAME}' dropped.\")\n","lang":"python","description":"This quickstart demonstrates how to use `sqlalchemy-utils` to create and manage a PostgreSQL database programmatically, define a model with a custom `ChoiceType`, and perform basic ORM operations. It utilizes `database_exists`, `create_database`, and `ChoiceType` from the utility library. Environment variables are used for database credentials for security and flexibility. To run this, ensure a PostgreSQL server is accessible and you have `psycopg2-binary` or `psycopg` installed.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-19","installed_version":"0.42.1","pypi_latest":"0.42.1","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.3,"avg_import_s":1.1,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.94,"mem_mb":26.6,"disk_size":"43.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.93,"mem_mb":26.6,"disk_size":"43.3M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.69,"mem_mb":26.6,"disk_size":"42M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.66,"mem_mb":26.6,"disk_size":"42M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.33,"mem_mb":29.4,"disk_size":"48.5M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.44,"mem_mb":29.4,"disk_size":"48.5M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":1.2,"mem_mb":29.4,"disk_size":"47M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.12,"mem_mb":29.4,"disk_size":"47M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.34,"mem_mb":29,"disk_size":"39.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.38,"mem_mb":29,"disk_size":"39.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.29,"mem_mb":29,"disk_size":"38M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.32,"mem_mb":29,"disk_size":"38M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.26,"mem_mb":29.3,"disk_size":"39.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.29,"mem_mb":29.3,"disk_size":"39.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.21,"mem_mb":29.3,"disk_size":"38M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.31,"mem_mb":29.3,"disk_size":"38M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.85,"mem_mb":27.3,"disk_size":"41.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.88,"mem_mb":27.3,"disk_size":"41.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4,"import_time_s":0.81,"mem_mb":27.3,"disk_size":"41M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqlalchemy-utils","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.78,"mem_mb":27.3,"disk_size":"41M"}]}}