{"id":23186,"library":"wtforms-sqlalchemy","title":"WTForms-SQLAlchemy","description":"SQLAlchemy utilities for WTForms, including model form generation, query-based choice fields, and integration with SQLAlchemy ORM. Current version 0.4.2, requires Python >=3.9. Release cadence is sporadic.","status":"active","version":"0.4.2","language":"python","source_language":"en","source_url":"https://github.com/wtforms/wtforms-sqlalchemy","tags":["wtforms","sqlalchemy","forms","orm"],"install":[{"cmd":"pip install wtforms-sqlalchemy","lang":"bash","label":"install from PyPI"}],"dependencies":[{"reason":"Core dependency","package":"SQLAlchemy","optional":false},{"reason":"Core dependency","package":"WTForms","optional":false}],"imports":[{"note":"Old path from Flask-WTF; removed in wtforms-sqlalchemy 0.4","wrong":"from wtforms.ext.sqlalchemy.fields import QuerySelectField","symbol":"QuerySelectField","correct":"from wtforms_sqlalchemy.fields import QuerySelectField"},{"note":"ModelForm class replaced by model_form factory function","wrong":"from flask_wtf import FlaskForm","symbol":"ModelForm","correct":"from wtforms_sqlalchemy.orm import model_form"}],"quickstart":{"code":"from sqlalchemy import create_engine, Column, Integer, String\nfrom sqlalchemy.orm import DeclarativeBase\nfrom wtforms import Form, StringField\nfrom wtforms_sqlalchemy.orm import model_form\n\nclass Base(DeclarativeBase):\n    pass\n\nclass User(Base):\n    __tablename__ = 'users'\n    id = Column(Integer, primary_key=True)\n    name = Column(String)\n\nengine = create_engine('sqlite:///:memory:', echo=False)\nBase.metadata.create_all(engine)\n\nUserForm = model_form(User, base_class=Form, exclude=['id'])\nform = UserForm(data={'name': 'Alice'})\nprint(form['name'].data)  # Alice","lang":"python","description":"Create a form model from a SQLAlchemy declarative model using model_form."},"warnings":[{"fix":"Use wtforms_sqlalchemy.fields and wtforms_sqlalchemy.orm instead.","message":"0.4 removed the old Flask-WTF compatibility layer. Imports from wtforms.ext.sqlalchemy no longer work.","severity":"breaking","affected_versions":"0.4.x"},{"fix":"Replace ModelForm subclass with model_form(Model, base_class=Form, ...).","message":"ModelForm class (from wtforms_sqlalchemy.orm) is deprecated in 0.4.2 and slated for removal. Use the model_form() factory function instead.","severity":"deprecated","affected_versions":">=0.4.0"},{"fix":"Pass a lambda that returns the query, e.g., query_factory=lambda: session.query(Model).","message":"QuerySelectField and QuerySelectMultipleField require a query factory, not a static query. Passing a SQLAlchemy query object will raise 'BaseQuery object is not callable'.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use 'from wtforms_sqlalchemy.fields import QuerySelectField'","cause":"Old import path from Flask-WTF; removed in wtforms-sqlalchemy 0.4","error":"ImportError: cannot import name 'QuerySelectField' from 'wtforms.ext.sqlalchemy'"},{"fix":"Use query_factory=lambda: session.query(Model) or query_factory=Model.query (if Flask-SQLAlchemy)","cause":"Passing a static query object instead of a callable query factory to QuerySelectField","error":"TypeError: 'BaseQuery' object is not callable"},{"fix":"Update to >=0.4.2: pip install --upgrade wtforms-sqlalchemy","cause":"Installed version is too old (pre-0.4) or installation is incomplete","error":"AttributeError: module 'wtforms_sqlalchemy' has no attribute 'orm'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}