Flask-FileAlchemy
es una extensión de frascos que le permite usar archivos de texto sencillo formateados por Markdown o Yaml como el almacén de datos principal para sus aplicaciones.
$ pip install flask-filealchemy
Las restricciones en qué tienda de datos usar para aplicaciones que solo tienen que ejecutarse localmente son bastante relajadas en comparación con las que tienen que servir el tráfico de producción. Para tales aplicaciones, normalmente está bien sacrificarse por el rendimiento para facilitar el uso.
Un caso de uso muy fuerte aquí es generar sitios estáticos. Si bien puede usar Frozen-Flask para "congelar" una aplicación de matraz completa a un conjunto de archivos HTML, su aplicación aún necesita leer datos de algún lugar. Esto significa que necesitará configurar un almacén de datos, que (localmente) tiende a ser sqlite basado en archivos. Si bien eso hace el trabajo extremadamente bien, esto también significa ejecutar declaraciones SQL para ingresar datos.
Dependiendo de cuántos modelos de datos tenga y qué tipos contengan, esto puede salir de control (imagine tener que escribir una declaración INSERT
para una publicación de blog).
Además, no puede controlar las versiones sus datos. Bueno, técnicamente puedes, pero las diferencias no tendrán ningún sentido para un humano.
Flask -FilealChemy le permite utilizar un almacén de datos alternativo: archivos de texto sin formato.
Los archivos de texto sin formato tienen la ventaja de ser mucho más fácil de manejar para un humano. Además, puede controlarlos para que los datos y el código de su aplicación se registren juntos y compartan el historial.
Flask-FilealChemy le permite ingresar sus datos en los archivos de texto sin formato formateados por Markdown o Yaml y los carga de acuerdo con los modelos SQLalchemy que ha definido utilizando Flask-Sqlalchemy, estos datos se colocan en cualquier almacén de datos que esté utilizando (SQLite in Memory SQLite Funciona mejor) y luego está listo para que su aplicación consulte, sin embargo, lo desee.
Esto le permite retener la comodidad de los sitios dinámicos sin comprometer la simplicidad de los sitios estáticos.
Defina sus modelos de datos utilizando la API estándar (frascos) SQLalchemy. Como ejemplo, un modelo BlogPost
puede definirse de la siguiente manera.
app = Flask ( __name__ )
# configure Flask-SQLAlchemy
app . config [ 'SQLALCHEMY_DATABASE_URI' ] = 'sqlite:///:memory:'
db = SQLAlchemy ()
db . init_app ( app )
class BlogPost ( db . Model ):
__tablename__ = 'blog_posts'
slug = Column ( String ( 255 ), primary_key = True )
title = Column ( String ( 255 ), nullable = False )
content = Column ( Text , nullable = False )
A continuación, cree un directorio data/
en algún lugar de su disco (para mantener las cosas simples, se recomienda tener este directorio en la raíz de la aplicación). Para cada modelo que haya definido, cree un directorio en este data/
directorio con el mismo nombre que el atributo __tablename__
.
Actualmente admitimos tres formas diferentes de definir datos.
La primera forma es tener múltiples archivos YAML dentro de los data/<__tablename__>/
Directory, cada archivo correspondiente a un registro.
En el caso del ejemplo "Blog", podemos definir un nuevo registro BlogPost
creando el archivo data/blog_posts/first-post-ever.yml
con el siguiente contenido.
slug : first-post-ever
title : First post ever!
content : |
This blog post talks about how it's the first post ever!
Agregar más archivos de este tipo en el mismo directorio daría como resultado más registros.
Para modelos "más pequeños" que no tienen más de 2-3 campos, FlaskalealChemy admite la lectura de un archivo _all.yml
. En tal caso, en lugar de agregar un archivo para cada fila, simplemente agregue todas las filas en el archivo _all.yml
dentro del directorio de la tabla.
Para el ejemplo de "blog", esto se vería como lo siguiente.
- slug : first-post-ever
title : First post ever!
content : This blog post talks about how it's the first post ever!
- slug : second-post-ever
title : second post ever!
content : This blog post talks about how it's the second post ever!
También es posible cargar datos de archivos de Markdown de estilo Jekyll que contienen metadatos de frontmatter.
En el caso del ejemplo del blog, es posible crear un nuevo registro BlogPost
definiendo un archivo data/blog_posts/first-post-ever.md
con el siguiente contenido.
---
slug : first-post-ever
title : First post ever!
---
This blog post talks about how it's the first post ever!
Tenga en cuenta que al definir datos usando Markdown, el nombre de la columna asociado con el cuerpo principal de Markdown debe estar content
.
Finalmente, configure Flask-FileAlchemy
con su configuración y pídale que cargue todos sus datos.
# configure Flask-FileAlchemy
app . config [ 'FILEALCHEMY_DATA_DIR' ] = os . path . join (
os . path . dirname ( os . path . realpath ( __file__ )), 'data'
)
app . config [ 'FILEALCHEMY_MODELS' ] = ( BlogPost ,)
# load tables
FileAlchemy ( app , db ). load_tables ()
Flask-FileAlchemy
luego lee sus datos del directorio dado y los almacena en el almacén de datos de su elección con la que configuró Flask-FileAlchemy
(la preferencia es sqlite:///:memory:
:).
Tenga en cuenta que no es posible escribir en esta base de datos utilizando db.session
. Bueno, técnicamente está permitido, pero los cambios que realiza su aplicación solo se reflejarán en el almacén de datos en memoria, pero no se persistirán en el disco.
¡Las contribuciones son bienvenidas!
Asegúrese de tener instalado Python 3.7+ y poesía.
Git Clone El repositorio - git clone https://github.com/siddhantgoel/flask-filealchemy
.
Instale los paquetes requeridos para el desarrollo - poetry install
.
Eso es básicamente todo. Ahora debería poder ejecutar la suite de prueba: poetry run pytest
.