{"library":"marshmallow-sqlalchemy","title":"marshmallow-sqlalchemy","description":"marshmallow-sqlalchemy provides integration between the SQLAlchemy ORM and the marshmallow (de)serialization library. It simplifies creating schemas for SQLAlchemy models, enabling automatic field generation and handling of relationships. The current version is 1.5.0, and it follows a release cadence generally aligned with its core dependencies, marshmallow and SQLAlchemy, with major updates addressing compatibility and new features.","language":"python","status":"active","last_verified":"Wed May 13","install":{"commands":["pip install marshmallow-sqlalchemy"],"cli":null},"imports":["from marshmallow_sqlalchemy import SQLAlchemyAutoSchema","from marshmallow_sqlalchemy import SQLAlchemySchema"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import datetime\nfrom sqlalchemy import create_engine, Column, Integer, String, DateTime\nfrom sqlalchemy.orm import sessionmaker, declarative_base\nfrom marshmallow_sqlalchemy import SQLAlchemyAutoSchema\nfrom marshmallow import fields\n\n# 1. Define SQLAlchemy Base and Model\nBase = declarative_base()\n\nclass User(Base):\n    __tablename__ = 'users'\n    id = Column(Integer, primary_key=True)\n    name = Column(String(50), nullable=False)\n    email = Column(String(100), unique=True, nullable=False)\n    created_at = Column(DateTime, default=datetime.datetime.now)\n\n    def __repr__(self):\n        return f\"<User(id={self.id}, name='{self.name}')>\"\n\n# 2. Set up database (in-memory SQLite for example)\nengine = create_engine('sqlite:///:memory:')\nBase.metadata.create_all(engine)\nSession = sessionmaker(bind=engine)\nsession = Session()\n\n# 3. Define Marshmallow Schema for the User model\nclass UserSchema(SQLAlchemyAutoSchema):\n    class Meta:\n        model = User\n        load_instance = True  # Optional: Allows loading data into existing instances\n        sqla_session = session # Essential for relationship handling\n        # fields = ('id', 'name', 'email', 'created_at') # Explicit fields\n\n    # Example of overriding a field (optional)\n    created_at = fields.DateTime(format='%Y-%m-%d %H:%M:%S')\n\n# 4. Usage Example\nuser_data = {\n    'name': 'Alice Smith',\n    'email': 'alice@example.com'\n}\n\n# Create a schema instance\nuser_schema = UserSchema()\n\n# Deserialize (load) data to create a new User object\nnew_user = user_schema.load(user_data, session=session)\nsession.add(new_user)\nsession.commit()\n\nprint(f\"Created user: {new_user}\")\n\n# Serialize (dump) an existing User object\nserialized_user = user_schema.dump(new_user)\nprint(f\"Serialized user: {serialized_user}\")\n\n# Update an existing user\nupdate_data = {'name': 'Alicia Smith'}\nalice = session.query(User).filter_by(email='alice@example.com').first()\nupdated_user = user_schema.load(update_data, instance=alice, session=session)\nsession.add(updated_user)\nsession.commit()\n\nprint(f\"Updated user: {updated_user}\")\n\nsession.close()","lang":"python","description":"This quickstart demonstrates how to define a SQLAlchemy model, create a corresponding `SQLAlchemyAutoSchema`, and then use it to serialize (dump) and deserialize (load) data, including creating new instances and updating existing ones. It highlights the importance of passing the `session` to the schema for full functionality, especially with relationships.","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-13","installed_version":"1.4.2","pypi_latest":"1.5.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.3,"avg_import_s":1.58,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.25,"mem_mb":25,"disk_size":"43.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.46,"mem_mb":25,"disk_size":"43.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.9,"mem_mb":25,"disk_size":"42M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":25,"disk_size":"42M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.07,"mem_mb":27.8,"disk_size":"48.2M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.44,"mem_mb":27.8,"disk_size":"48.2M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":1.87,"mem_mb":27.8,"disk_size":"47M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.83,"mem_mb":27.8,"disk_size":"47M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.76,"mem_mb":27.4,"disk_size":"39.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.06,"mem_mb":27.4,"disk_size":"39.5M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":1.92,"mem_mb":27.4,"disk_size":"38M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.99,"mem_mb":27.4,"disk_size":"38M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.92,"mem_mb":27.3,"disk_size":"39.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.92,"mem_mb":27.3,"disk_size":"38.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":1.76,"mem_mb":27.3,"disk_size":"37M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":2.03,"mem_mb":27.3,"disk_size":"37M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.92,"mem_mb":25.4,"disk_size":"41.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.97,"mem_mb":25.4,"disk_size":"41.8M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":4.1,"import_time_s":0.76,"mem_mb":25.4,"disk_size":"41M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"marshmallow-sqlalchemy","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.86,"mem_mb":25.4,"disk_size":"41M"}]}}