{"library":"sqlalchemy-utc","title":"SQLAlchemy UTC Datetime Type","type":"library","description":"SQLAlchemy-UTC provides a `UtcDateTime` type for SQLAlchemy that reliably stores and retrieves timezone-aware `datetime` objects in UTC. It acts as a robust replacement for SQLAlchemy's built-in `DateTime(timezone=True)`, particularly for databases like SQLite and MySQL that lack native `timestamptz` support by converting values to and from UTC. The library also includes a `utcnow()` helper function for server-side default generation. The current version is 0.14.0, released in September 2021.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install sqlalchemy-utc"],"cli":null},"imports":["from sqlalchemy_utc import UtcDateTime","from sqlalchemy_utc import utcnow"],"auth":{"required":false,"env_vars":[]},"links":{"homepage":null,"github":"https://github.com/spoqa/sqlalchemy-utc","docs":null,"changelog":null,"pypi":"https://pypi.org/project/sqlalchemy-utc/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null},"quickstart":{"code":"import datetime\nfrom sqlalchemy import create_engine, Column, Integer, String\nfrom sqlalchemy.orm import sessionmaker, declarative_base\nfrom sqlalchemy_utc import UtcDateTime, utcnow\n\n# Setup database (using SQLite for simplicity)\nengine = create_engine('sqlite:///./test.db')\nBase = declarative_base()\n\nclass Event(Base):\n    __tablename__ = 'events'\n    id = Column(Integer, primary_key=True)\n    name = Column(String)\n    created_at = Column(UtcDateTime, default=utcnow)\n    updated_at = Column(UtcDateTime, default=utcnow, onupdate=utcnow)\n\n    def __repr__(self):\n        return f\"<Event(id={self.id}, name='{self.name}', created_at={self.created_at}, updated_at={self.updated_at})>\"\n\n# Create tables\nBase.metadata.create_all(engine)\n\nSession = sessionmaker(bind=engine)\nsession = Session()\n\n# Create a new event\nnew_event = Event(name='Meeting Start')\nsession.add(new_event)\nsession.commit()\nprint(f\"Created event: {new_event}\")\n\n# Retrieve and verify timezone\nretrieved_event = session.query(Event).filter_by(name='Meeting Start').first()\nprint(f\"Retrieved event: {retrieved_event}\")\nassert retrieved_event.created_at.tzinfo == datetime.timezone.utc\nprint(\"Created_at is UTC aware.\")\n\n# Update an event\nretrieved_event.name = 'Meeting Concluded'\nsession.add(retrieved_event)\nsession.commit()\nprint(f\"Updated event: {retrieved_event}\")\nassert retrieved_event.updated_at.tzinfo == datetime.timezone.utc\nprint(\"Updated_at is UTC aware.\")\n\nsession.close()","lang":"python","description":"This quickstart demonstrates defining a SQLAlchemy model with `UtcDateTime` columns, using `utcnow()` for default and on-update values. It then creates, retrieves, and updates an event, verifying that the `datetime` objects returned are always timezone-aware and in UTC.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"0.14.0","pypi_latest":"0.14.0","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.4,"avg_import_s":0.72,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.6,"mem_mb":15.5,"disk_size":"42.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.45,"mem_mb":15.5,"disk_size":"41M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.84,"mem_mb":17.6,"disk_size":"47.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.72,"mem_mb":17.6,"disk_size":"46M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.89,"mem_mb":17.4,"disk_size":"47.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.94,"mem_mb":17.4,"disk_size":"46M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.9,"mem_mb":17.6,"disk_size":"47.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.6,"import_time_s":0.84,"mem_mb":17.6,"disk_size":"46M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.52,"mem_mb":15.1,"disk_size":"41.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"sqlalchemy-utc","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.47,"mem_mb":15.1,"disk_size":"40M"}]}}