FastaAPI's CRUD project generator for SQLALchemy.
Project description
Fastapi CRUD Project Generator
A code generator that help you to establish a fastapi project with CRUD router from your Sqlalchemy model. Which supports following api:
- Get one
- Get many
- Insert one
- Insert many
- Update one
- Update many
- Patch one
- Patch many
- Delete one
- Delete many
Quick Start with in-memory DB (or see the other (example)
Install
pip install fastapi-crud-code-generator
Prepare your Sqlalchemy schema
- You can use sqlacodegen to generate SQLAlchemy models for your table. This project is based on the model development and testing generated by sqlacodegen
from sqlalchemy import *
from sqlalchemy.orm import declarative_base
Base = declarative_base()
metadata = Base.metadata
class SampleTable(Base):
__tablename__ = 'test_build_myself_memory'
__table_args__ = (
UniqueConstraint('primary_key', 'int4_value', 'float4_value'),
)
primary_key = Column(Integer, primary_key=True, autoincrement=True)
bool_value = Column(Boolean, nullable=False, default=False)
bytea_value = Column(LargeBinary)
char_value = Column(CHAR(10, collation='NOCASE'))
date_value = Column(Date)
float4_value = Column(Float, nullable=False)
float8_value = Column(Float(53), nullable=False, default=10.10)
int2_value = Column(SmallInteger, nullable=False)
int4_value = Column(Integer, nullable=False)
int8_value = Column(BigInteger, default=99)
text_value = Column(Text)
varchar_value = Column(String)
class SampleTableTwo(Base):
__tablename__ = 'test_build_myself_memory_two'
primary_key = Column(Integer, primary_key=True, autoincrement=True)
bool_value = Column(Boolean, nullable=False, default=False)
bytea_value = Column(LargeBinary)
Use crud_router_builder() to generate the project from the executing folder (using in-memory sqlite db here)
from fastapi_quickcrud_codegen.db_model import DbModel
from fastapi_quickcrud_codegen.misc.type import CrudMethods
from fastapi_quickcrud_codegen import crud_router_builder
model_list = [DbModel(db_model=SampleTable, prefix="/my_first_api", tags=["sample api"],
exclude_columns=['bytea_value']),
DbModel(db_model=SampleTableTwo, prefix="/my_second_api", tags=["sample api"],
exclude_columns=['bytea_value'],crud_methods=[CrudMethods.FIND_ONE])]
crud_router_builder(
db_model_list=model_list,
# is_async=True,
# database_url="sqlite+aiosqlite://",
is_async=False,
database_url="sqlite://"
)
crud_router_builder args
-
db_model_list
[Required[List[DbModel]]]Model list of dict for code generate
List[]DbModel- db_model
[Required[DeclarativeMeta]] - prefix
[Required[str]]prefix for Fastapi's end point
- tags
[Required[List[str]]]list of tag for Fastapi's end point
- exclude_columns
[Optional[List[str]]]set the columns that not to be operated but the columns should nullable or set the default value)
- crud_methods
[Opional[List[CrudMethods]]]- Create the following apis for that model, but default: [CrudMethods.FIND_MANY, CrudMethods.FIND_ONE, CrudMethods.CREATE_MANY, CrudMethods.PATCH_ONE, CrudMethods.PATCH_MANY, CrudMethods.PATCH_ONE, CrudMethods.UPDATE_MANY, CrudMethods.UPDATE_ONE, CrudMethods.DELETE_MANY, CrudMethods.DELETE_ONE]
- CrudMethods.FIND_ONE - CrudMethods.FIND_MANY - CrudMethods.UPDATE_ONE - CrudMethods.UPDATE_MANY - CrudMethods.PATCH_ONE - CrudMethods.PATCH_MANY - CrudMethods.CREATE_ONE - CrudMethods.CREATE_MANY - CrudMethods.DELETE_ONE - CrudMethods.DELETE_MANY
- db_model
-
is_async
[Required]True for async; False for sync
-
database_url
[Optional (str)]A database URL. The URL is passed directly to SQLAlchemy's create_engine() method so please refer to SQLAlchemy's documentation for instructions on how to construct a proper URL.
Known limitations
- ❌ Please use composite unique constraints instead instead multiple unique constraints
- ❌ Composite primary key is not supported
- ❌ Sqlalchemy table type model schema is not supported
Design:
The model generation part and api router part refer to my another project; The code generation part is using Jinja
How to contribute more apis?
It will be super excited if you have any idea with api router/ model template. then you can follow the step as below to try to contribute.
- Model generation
- Prepare Jinja template to
fastapi-crud-project-generator/src/fastapi_quickcrud_codegen/model/template - Prepare model code generation method from
fastapi_quickcrud_codegen.utils.schema_builder.ApiParameterSchemaBuilder - Generate the code from
fastapi_quickcrud_codegen/model/model_builder.py
- Prepare Jinja template to
- CRUD Method Generation
- After the model generation, you can try to build your own api by your own model
- Modify
fastapi_quickcrud_codegen.utils.sqlalchemy_to_pydantic.sqlalchemy_to_pydantic,fastapi_quickcrud_codegen.misc.type.CrudMethodsandfastapi_quickcrud_codegen.misc.crud_model.CRUDModelto let project supports your api - Prepare your api router Jinja template from
src/fastapi_quickcrud_codegen/model/template/route - Generate the code from
fastapi_quickcrud_codegen/model/crud_builder.py - Update the api_register from
src/fastapi_quickcrud_codegen/crud_generator.py
- use Sqlalchemy's sql.expression instead custom statement when building sql statement for your api
Road map
Current State: Stable
Will do:
- Support foreign tree in find api
- Support foreign tree in insert api
- Support foreign tree in update api
- Support foreign tree in delete api
Good to have:
- Support Sqlalchemy Table type model
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi-crud-code-generator-0.0.21.tar.gz.
File metadata
- Download URL: fastapi-crud-code-generator-0.0.21.tar.gz
- Upload date:
- Size: 60.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7668d809c56590d017da9f8bc76fff9559322c4294856d1005fb6e0003bce651
|
|
| MD5 |
3f735794166df6e09b16ef182513456a
|
|
| BLAKE2b-256 |
002f218cd37ef0ed9e164c49c2d7085fefd05d00a5fc5777db4f8c27129a3df0
|
File details
Details for the file fastapi_crud_code_generator-0.0.21-py3-none-any.whl.
File metadata
- Download URL: fastapi_crud_code_generator-0.0.21-py3-none-any.whl
- Upload date:
- Size: 45.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3de5f5e070546ca85210379735f001ccf2bb0b0038a50d3d38314d9611ff6f4
|
|
| MD5 |
c95d9457e82f36d55bdfeb3ba0b43744
|
|
| BLAKE2b-256 |
8a4fc7b8f3308f399f623f6ebb18941a5c80fe4d49a36c55e591d533ca9678d6
|