aiosql
docker-flask-example
aiosql | docker-flask-example | |
---|---|---|
10 | 31 | |
1,245 | 551 | |
- | - | |
8.7 | 7.8 | |
about 2 months ago | 19 days ago | |
Python | Python | |
GNU General Public License v3.0 or later | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
aiosql
-
Don't use your ORM entities for everything – embrace the SQL
> resort to raw SQL
I'm the opposite, I would rather write SQL than "resorting to" ORM queries, which is why my favourite libraries are aiosql[1] in Python, Hugsql[2] in Clojure and similar: write the queries as SQL in .sql files, which then get exposed as functions to your code.
[1] https://nackjicholson.github.io/aiosql/
[2] https://www.hugsql.org/
-
Project template without ORM
I prefer to use aiosql https://nackjicholson.github.io/aiosql/ to organize my SQL and have it in a SQL folder. It looks like this where colons specify variables:
-
If you could choose any Python web framework to build APIs for a startup, which one would you choose and why?
I tend to do a lot of data-heavy projects, so I tend to eschew ORM-style code and use a project called aiosql to bind raw SQL to python methods, and offload as much expensive computation to the DB as possible. If I'm prototyping an endpoint (e.g. calculating percentiles for some midsized time-series data), and just need a non-performant working placeholder, it's extremely easy to dump a SQL table to pandas and yeet something together in a few lines - then smoothly replace it with a more performant SQL query down the road. Highly contextual move, but I find it to be an awesome balancing point between flexibility, scalability, performance, productivity, etc.
-
Which not so well known Python packages do you like to use on a regular basis and why?
As one of the rare Python developers who actually like SQL, my favourite database library is aiosql
-
Database as Code. Not only migrations
Only slightly off-topic, poking around in there led me to aiosql, which takes an idea I'd had and jumps forward a good long way. :-)
-
The Data-Oriented Design Process for Game Development
I've been doing something in this vein for a big personal project, using this python library: https://nackjicholson.github.io/aiosql/.
In short, I'm using a run of the mill stack (Caddy/Gunicorn/Flask/Postgres) - but with the twist that all my core logic is defined in plaintext SQL files, which get bound into namespaced Python methods by aiosql. Routing, error handling, templating, etc. are all done in Python - but all data manipulation and processing are outsourced to the DB level. All database object definitions are laid out in a massive, idempotent "init_db" method that gets called at launch, so I can essentially point the app at a fresh instance of Postgres and rebuild from scratch. The design is primarily driven by my personal distaste for ORMs, but I've found it extremely beneficial in terms of rigid typing, integrity checks, and performance.
-
Is it bad practice for my flask API to run raw SQL queries against my DB to get/post data?
Definitely check out https://nackjicholson.github.io/aiosql/ if you want to stick with SQL
-
Django 4.0 release candidate 1 released
I took that approach on my latest Flask project and it’s gone quite swimmingly. The problem I ran into was that a lot of the ecosystem, and therefore documentation, blog posts, helper libraries, etc., are all written under the assumption that you’re using an ORM. It took a while to figure out how to work around that, but once I did, I was home clear.
I also used a helper library to automatically map namespaced .sql files onto python functions with various return types, which made the development process way more elegant: https://nackjicholson.github.io/aiosql/. Absolute game changer if you plan to go this route - can’t recommend it highly enough.
-
FastAPI framework, high perf, easy to learn, fast to code, ready for production
I've been using FastAPI for some time, and now I'm using it as a full web framework (not just for REST APIs). I like writing SQL without ORMs, so the combination of aiosql[0] + FastAPI + Jinja2 works great. Add HTMX[1] and even interactive websites become easy.
That's in fact the stack I am using to build https://drwn.io/ and I couldn't enjoy it more.
Thanks Sebastián for creating it!
[0] https://github.com/nackjicholson/aiosql
docker-flask-example
-
We Have to Talk About Flask
I've been maintaining my Build a SAAS App with Flask video course[0] for 8 years. It has gone from pre-1.0 to 2.3 and has been recorded twice with tons of incremental updates added over the years to keep things current.
In my opinion tutorial creators should pin their versions so that anyone taking the course or going through the tutorial will have a working version that matches the video or written material.
I'm all for keeping things up to date and do update things every few months but rolling updates don't tend to work well for tutorials because sometimes a minor version requires a code change or covering new concepts. As a tutorial consumer it's frustrating when the content doesn't match the source code unless it's nothing but a version bump.
I've held off upgrading Flask to 3.0 and Python 3.12 due to these open issues with 3rd party dependencies https://github.com/nickjj/docker-flask-example/issues/17.
[0]: https://buildasaasappwithflask.com/
-
Working with Docker Containers Made Easy with the Dexec Bash Script
I usually end up with project specific "run" scripts which are just shell scripts so I can do things like `./run shell` to drop into the shell of a container, or `./run rails db:migrate` to run a command in a container.
Here's a few project specific examples. They all have similar run scripts:
- https://github.com/nickjj/docker-flask-example
- Looking to use Docker & Docker Compose in production and need advice.
-
Docker Compose Examples
There's a lot of "tool" selections in that repo.
If anyone is looking for ready to go web app examples aimed at both development and production, I maintain:
- https://github.com/nickjj/docker-flask-example
-
starter project?
Personally I maintain https://github.com/nickjj/docker-flask-example. There's also https://github.com/nickjj/build-a-saas-app-with-flask if you want more opinions.
-
Act: Run your GitHub Actions locally
This is what I do except I use a shell script instead of a Makefile.
A working example of this is at: https://github.com/nickjj/docker-flask-example/blob/912388f3...
Those ./run ci:XXX commands are in: https://github.com/nickjj/docker-flask-example/blob/912388f3...
I like it because if CI ever happens to be down I can still run that shell script locally.
- docker-compose file repository?
-
How boring should your team be
> I've encountered a code written in the 12factor style of using environment variables for configuration, and in that particular case there was no validation nor documentation of the configuration options. Is this typical?
I don't know about typical, it comes down to how your team values the code they write.
You can have a .env.example file commit to version control which explains every option in as much or as little detail as you'd like. For my own personal projects, I tend to document this file like this https://github.com/nickjj/docker-flask-example/blob/main/.en....
-
The Unreasonable Effectiveness of Makefiles
I did this for a while but make isn't well suited for this use case. What I end up doing is have a shell script with a bunch of functions in it. Functions automatically becomes a callable a command (with a way to make private functions if you want) with pretty much no boiler plate.
The benefit of this is it's just shell scripting so you can use shell features like $@ to pass args to another command or easily source and deal with env vars.
I've written about this process at https://nickjanetakis.com/blog/replacing-make-with-a-shell-s... and an example file is here https://github.com/nickjj/docker-flask-example/blob/main/run.
-
Flask boilerplate project recommendation?
There's: https://github.com/nickjj/docker-flask-example
What are some alternatives?
databases - Async database support for Python. 🗄
mangum - AWS Lambda support for ASGI applications
full-stack-fastapi-template - Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.
build-a-saas-app-with-flask - Learn how to build a production ready web app with Flask and Docker.
django-async-orm - Bringing Async Capabilities to django ORM
earthly - Super simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.
fastapi-crudrouter - A dynamic FastAPI router that automatically creates CRUD routes for your models
Pebble - Java Template Engine
postgres-and-redis - 🗄 PostgreSQL + Redis. Self-Hosted. Docker + Traefik + HTTPS.
cookiecutter-flask - A flask template with Bootstrap, asset bundling+minification with webpack, starter templates, and registration/authentication. For use with cookiecutter.