{"library":"ormar","title":"Ormar","description":"Ormar is an async ORM for Python, designed with FastAPI and Pydantic validation in mind, supporting Postgres, MySQL, and SQLite. It provides a single model definition that acts as both an ORM model and a Pydantic model. Currently at version 0.23.1, it maintains an active development and release cadence, frequently pushing updates including vulnerability fixes and new features.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install ormar"],"cli":null},"imports":["from ormar import Model","from ormar import OrmarConfig","from ormar import DatabaseConnection","from ormar import Integer","from ormar import String","from ormar import Boolean"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import asyncio\nimport sqlalchemy\nimport ormar\n\n# 1. Define Database Connection and Metadata\nDATABASE_URL = \"sqlite+aiosqlite:///test.db\"\n\n# This assumes a base config for all models. For complex apps, use `base_ormar_config.copy()`\nbase_ormar_config = ormar.OrmarConfig(\n    metadata=sqlalchemy.MetaData(),\n    database=ormar.DatabaseConnection(DATABASE_URL),\n)\n\n# 2. Define an Ormar Model\nclass User(ormar.Model):\n    ormar_config = base_ormar_config.copy(tablename=\"users\")\n\n    id: int = ormar.Integer(primary_key=True)\n    name: str = ormar.String(max_length=100)\n    is_active: bool = ormar.Boolean(default=True)\n\nasync def main():\n    # 3. Connect to the database and create tables\n    if not base_ormar_config.database.is_connected:\n        await base_ormar_config.database.connect()\n    \n    # Create tables (only once, usually in a migration or startup script)\n    # For a persistent DB, use alembic. For quickstart, create all.\n    print(\"Creating tables...\")\n    engine = sqlalchemy.create_engine(DATABASE_URL.replace('+aiosqlite', ''))\n    base_ormar_config.metadata.create_all(engine)\n    print(\"Tables created.\")\n\n    # 4. Create a new user\n    print(\"Creating user Jane Doe...\")\n    jane = await User.objects.create(name=\"Jane Doe\")\n    print(f\"Created user: {jane.id} - {jane.name} (active: {jane.is_active})\")\n\n    # 5. Retrieve all users\n    print(\"Retrieving all users...\")\n    users = await User.objects.all()\n    for user in users:\n        print(f\"Found user: {user.id} - {user.name} (active: {user.is_active})\")\n\n    # 6. Disconnect from the database\n    print(\"Disconnecting from database...\")\n    if base_ormar_config.database.is_connected:\n        await base_ormar_config.database.disconnect()\n    print(\"Disconnected.\")\n\nif __name__ == \"__main__\":\n    asyncio.run(main())\n","lang":"python","description":"This quickstart demonstrates how to set up an Ormar model, connect to an in-memory SQLite database, create tables, and perform basic CRUD operations. It uses the modern `OrmarConfig` and `DatabaseConnection` patterns. Note that for persistent databases, `alembic` is recommended for migrations, and `create_all` is typically run only once during setup or testing.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.22.0","pypi_latest":"0.25.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":5.2,"avg_import_s":1.21,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.02,"mem_mb":26.3,"disk_size":"53.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.8,"import_time_s":0.76,"mem_mb":26.5,"disk_size":"52M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.47,"mem_mb":29.4,"disk_size":"59.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.9,"import_time_s":1.29,"mem_mb":29.6,"disk_size":"59M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.41,"mem_mb":29,"disk_size":"50.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.4,"import_time_s":1.45,"mem_mb":29.1,"disk_size":"50M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.48,"mem_mb":29.2,"disk_size":"50.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.4,"import_time_s":1.38,"mem_mb":29.4,"disk_size":"49M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.95,"mem_mb":26.9,"disk_size":"52.3M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"ormar","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.5,"import_time_s":0.9,"mem_mb":26.9,"disk_size":"51M"}]}}