sphinx-sqlalchemy#
Sphinx extension for documenting SQLAlchemy ORMs.
Usage#
Install sphinx_sqlalchemy
:
pip install sphinx_sqlalchemy
Add sphinx_sqlalchemy
to your conf.py
:
extensions = [
'sphinx_sqlalchemy',
]
Example#
.. sqla-model:: example.models.User
.. sqla-model:: ~example.models.Address
- example.models.User (dbusers)
A
user
.Columns:
pk*
INTEGER
first_name
VARCHAR?
The name of the user.
last_name
VARCHAR(255)?
The surname of the user.
dob
DATE
The date of birth.
Constraints:
PRIMARY KEY (pk)
UNIQUE (first_name, last_name)
- Address (addresses)
An address.
Columns:
pk*
INTEGER
number
INTEGER
The number of the address.
postcode
VARCHAR
The postcode of the address.
→ user_id
INTEGER?
Constraints:
CHECK (number>0)
FOREIGN KEY (dbusers.pk → user_id)
PRIMARY KEY (pk)
Indexes:
ix_addresses_postcode (postcode)
This was created from:
"""Example SQLAlchemy ORM models."""
from sqlalchemy import CheckConstraint, Column, ForeignKey, UniqueConstraint, orm, types
Base = orm.declarative_base()
class User(Base):
"""A ``user``."""
__tablename__ = "dbusers"
__table_args__ = (UniqueConstraint("first_name", "last_name"),)
pk = Column(types.Integer, primary_key=True)
first_name = Column(types.String, doc="The name of the user.")
last_name = Column(types.String(255), doc="The surname of the user.")
dob = Column(types.Date, nullable=False, doc="The date of birth.")
class Address(Base):
"""An address."""
__tablename__ = "addresses"
__table_args__ = (CheckConstraint("number>0", name="check1"),)
pk = Column(types.Integer, primary_key=True)
number = Column(types.Integer, nullable=False, doc="The number of the address.")
postcode = Column(
types.String, nullable=False, index=True, doc="The postcode of the address."
)
user_id = Column(types.Integer, ForeignKey("dbusers.pk"))
user = orm.relationship("User")