dropbox/sqlalchemy-stubs
dropbox/sqlalchemy-stubs has 586 GitHub stars and 96 forks. GitHot measured +1 stars in 24 hours. Last checked 2026-11-11 20:25 UTC. Last push 2024-06-10.
Mypy plugin and stubs for SQLAlchemy
Crecimiento de estrellas medido
- in 24h
- +1
- in 7 days
- Actualización retrasada
- in 15 days
- Actualización retrasada
- in 1 month
- Actualización retrasada
Cambios netos en períodos que se solapan, no totales diarios. Los datos no disponibles se dejan en blanco. Las estrellas indican interés, no calidad.
README.md
OriginalMypy plugin and stubs for SQLAlchemy
This package contains type stubs and a mypy plugin to provide more precise static types and type inference for SQLAlchemy framework. SQLAlchemy uses some Python "magic" that makes having precise types for some code patterns problematic. This is why we need to accompany the stubs with mypy plugins. The final goal is to be able to get precise types for most common patterns. Currently, basic operations with models are supported. A simple example:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
user = User(id=42, name=42) # Error: Incompatible type for "name" of "User"
# (got "int", expected "Optional[str]")
user.id # Inferred type is "int"
User.name # Inferred type is "Column[Optional[str]]"
Some auto-generated attributes are added to models. Simple relationships are supported but require models to be imported:
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from models.address import Address
...
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
address = relationship('Address') # OK, mypy understands string references.
The next step is to support precise types for table definitions (e.g.
inferring Column[Optional[str]] for users.c.name, currently it is just
Column[Any]), and precise types for results of queries made using query()
and select().
Installation
Install latest published version as:
pip install -U sqlalchemy-stubs
Important: you need to enable the plugin in your mypy config file:
[mypy]
plugins = sqlmypy
To install the development version of the package:
git clone https://github.com/dropbox/sqlalchemy-stubs
cd sqlalchemy-stubs
pip install -U .
Development Setup
First, clone the repo and cd into it, like in Installation, then:
git submodule update --init --recursive
pip install -r dev-requirements.txt
Then, to run the tests, simply:
pytest
Development status
The package is currently in alpha stage. See issue tracker
for bugs and missing features. If you want to contribute, a good place to start is
help-wanted label.
Currently, some basic use cases like inferring model field types are supported. The long term goal is to be able to infer types for more complex situations like correctly inferring columns in most compound queries.
External contributions to the project should be subject to Dropbox Contributor License Agreement (CLA).
Copyright (c) 2018 Dropbox, Inc.
Explorar proyectos relacionados
Asabeneh/30-Days-Of-Python
El reto de programación 30 Days of Python es una guía paso a paso para aprender el lenguaje de programación Python en 30 días. Este reto puede llevar más de 100 días. Sigue tu propio ritmo. Estos vídeos también pueden ayudarte: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 estrellasgrafana/grafana
Plataforma abierta y componible de observabilidad y visualización de datos. Visualiza métricas, registros y trazas de múltiples fuentes, como Prometheus, Loki, Elasticsearch, InfluxDB, Postgres y muchas más.
77,830 estrellasredis/redis
Para los desarrolladores que crean aplicaciones en tiempo real basadas en datos, Redis es la opción preferida, la más rápida y la de más funciones como caché, servidor de estructuras de datos y motor de consultas de documentos y vectores.
77,395 estrellasapache/superset
Apache Superset es una plataforma de visualización y exploración de datos.
75,473 estrellas