Skip to content

Commit f8b81a7

Browse files
committed
update readme
1 parent c577b68 commit f8b81a7

File tree

3 files changed

+94
-14
lines changed

3 files changed

+94
-14
lines changed

README.md

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ pip install asyncpg
111111

112112
## Usage
113113

114-
#### Simple Code (get more example from `./example`)
114+
### Simple Code (get more example from ([example](https://github.com/LuisLuii/FastAPIQuickCRUD/blob/main/tutorial/sample.py))
115+
115116

116117
```python
117118
from fastapi import FastAPI
@@ -151,6 +152,67 @@ app.include_router(crud_route_1)
151152
app.include_router(crud_route_2)
152153
```
153154

155+
156+
### SQLAlchemy to Pydantic Model Converter ([example](https://github.com/LuisLuii/FastAPIQuickCRUD/blob/main/tutorial/basic_usage/quick_usage_with_async_SQLALchemy_Base.py))
157+
```python
158+
import uvicorn
159+
from fastapi import FastAPI, Depends
160+
from sqlalchemy.orm import declarative_base
161+
from fastapi_quickcrud import CrudMethods
162+
from fastapi_quickcrud import sqlalchemy_to_pydantic
163+
from fastapi_quickcrud.misc.memory_sql import sync_memory_db
164+
165+
app = FastAPI()
166+
167+
Base = declarative_base()
168+
metadata = Base.metadata
169+
170+
from sqlalchemy import CHAR, Column, Integer
171+
from sqlalchemy.ext.declarative import declarative_base
172+
173+
Base = declarative_base()
174+
metadata = Base.metadata
175+
176+
class Child(Base):
177+
__tablename__ = 'right'
178+
id = Column(Integer, primary_key=True)
179+
name = Column(CHAR, nullable=True)
180+
181+
182+
friend_model_set = sqlalchemy_to_pydantic(db_model=Child,
183+
crud_methods=[
184+
CrudMethods.FIND_MANY,
185+
CrudMethods.UPSERT_MANY,
186+
CrudMethods.UPDATE_MANY,
187+
CrudMethods.DELETE_MANY,
188+
CrudMethods.CREATE_ONE,
189+
CrudMethods.PATCH_MANY,
190+
191+
],
192+
exclude_columns=[])
193+
194+
post_model = friend_model_set.POST[CrudMethods.CREATE_ONE]
195+
196+
sync_memory_db.create_memory_table(Child)
197+
@app.post("/hello",
198+
status_code=201,
199+
tags=["Child"],
200+
response_model=post_model.responseModel,
201+
dependencies=[])
202+
async def my_api(
203+
query: post_model.requestBodyModel = Depends(post_model.requestBodyModel),
204+
session=Depends(sync_memory_db.get_memory_db_session)
205+
):
206+
db_item = Child(**query.__dict__)
207+
session.add(db_item)
208+
session.commit()
209+
session.refresh(db_item)
210+
return db_item.__dict__
211+
212+
uvicorn.run(app, host="0.0.0.0", port=8000, debug=False)
213+
214+
```
215+
154216
* Note:
155217
you can use [sqlacodegen](https://github.com/agronholm/sqlacodegen) to generate SQLAlchemy model for your table. This project is based on the model development and testing generated by sqlacodegen
156218

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = '0.1.7'
3+
VERSION = '0.1.8'
44

55
print("""
66

tutorial/relationship/many_to_many.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import uvicorn
2-
from fastapi import FastAPI
2+
from fastapi import FastAPI, Depends
33
from sqlalchemy.orm import declarative_base, sessionmaker
44

55
from fastapi_quickcrud import CrudMethods
66
from fastapi_quickcrud import crud_router_builder
77
from fastapi_quickcrud import sqlalchemy_to_pydantic
8+
from fastapi_quickcrud.misc.memory_sql import sync_memory_db
89

910
app = FastAPI()
1011

1112
Base = declarative_base()
1213
metadata = Base.metadata
1314

14-
1515
from sqlalchemy import CHAR, Column, ForeignKey, Integer, Table
1616
from sqlalchemy.orm import relationship
1717
from sqlalchemy.ext.declarative import declarative_base
@@ -37,23 +37,22 @@ class Child(Base):
3737
name = Column(CHAR, nullable=True)
3838

3939

40-
4140
user_model_m2m = sqlalchemy_to_pydantic(db_model=association_table,
42-
crud_methods=[
43-
CrudMethods.FIND_MANY,
44-
CrudMethods.UPSERT_ONE,
45-
CrudMethods.UPDATE_MANY,
46-
CrudMethods.DELETE_MANY,
47-
CrudMethods.PATCH_MANY,
41+
crud_methods=[
42+
CrudMethods.FIND_MANY,
43+
CrudMethods.UPSERT_ONE,
44+
CrudMethods.UPDATE_MANY,
45+
CrudMethods.DELETE_MANY,
46+
CrudMethods.PATCH_MANY,
4847

49-
],
50-
exclude_columns=[])
48+
],
49+
exclude_columns=[])
5150

5251
user_model_set = sqlalchemy_to_pydantic(db_model=Parent,
5352
crud_methods=[
5453
CrudMethods.FIND_MANY,
5554
CrudMethods.FIND_ONE,
56-
CrudMethods.UPSERT_ONE,
55+
CrudMethods.CREATE_ONE,
5756
CrudMethods.UPDATE_MANY,
5857
CrudMethods.UPDATE_ONE,
5958
CrudMethods.DELETE_ONE,
@@ -69,6 +68,7 @@ class Child(Base):
6968
CrudMethods.UPSERT_MANY,
7069
CrudMethods.UPDATE_MANY,
7170
CrudMethods.DELETE_MANY,
71+
CrudMethods.CREATE_ONE,
7272
CrudMethods.PATCH_MANY,
7373

7474
],
@@ -95,6 +95,24 @@ class Child(Base):
9595
dependencies=[],
9696
tags=["Child"]
9797
)
98+
post_model = friend_model_set.POST[CrudMethods.CREATE_ONE]
99+
100+
sync_memory_db.create_memory_table(Child)
101+
@app.post("/hello",
102+
status_code=201,
103+
tags=["Child"],
104+
response_model=post_model.responseModel,
105+
dependencies=[])
106+
async def my_api(
107+
query: post_model.requestBodyModel = Depends(post_model.requestBodyModel),
108+
session=Depends(sync_memory_db.get_memory_db_session)
109+
):
110+
db_item = Child(**query.__dict__)
111+
session.add(db_item)
112+
session.commit()
113+
session.refresh(db_item)
114+
return db_item.__dict__
115+
98116

99117
app.include_router(crud_route_1)
100118
app.include_router(crud_route_2)

0 commit comments

Comments
 (0)