@@ -66,9 +66,9 @@ from sqlmodel import SQLModel, Field
6666
6767class User (SQLModel , table = True ):
6868 id : int = Field(default = None , primary_key = True , nullable = False )
69- username: str = Field(title = ' username' , sa_column = Column(String( 100 ) , unique = True , index = True , nullable = False ) )
69+ username: str = Field(title = ' username' , max_length = 30 , unique = True , index = True , nullable = False )
7070 password: str = Field(default = ' ' , title = ' Password' )
71- create_time: datetime = Field(default_factory = datetime.utcnow , title = ' Create Time' )
71+ create_time: datetime = Field(default_factory = datetime.now , title = ' Create Time' )
7272```
7373
7474## AsyncDatabase
@@ -85,55 +85,6 @@ db = AsyncDatabase.create('sqlite+aiosqlite:///amisadmin.db?check_same_thread=Fa
8585
8686```
8787
88- ### Shortcut functions
89-
90- ``` python
91- from sqlalchemy import insert, select, update, delete
92-
93-
94- async def fast_execute ():
95- # update
96- stmt = update(User).where(User.id == 1 ).values({' username' : ' new_user' })
97- result = await db.execute(stmt)
98-
99- # select
100- stmt = select(User).where(User.id == 1 )
101- user = await db.execute(stmt, on_close_pre = lambda r : r.scalar())
102-
103- # insert
104- stmt = insert(User).values({' username' : ' User-6' , ' password' : ' password-6' })
105- result = await db.execute(stmt)
106-
107- # delete
108- stmt = delete(User).where(User.id == 6 )
109- result = await db.execute(stmt)
110-
111- # scalar
112- user = await db.scalar(select(User).where(User.id == 1 ))
113-
114- # scalars_all
115- stmt = select(User)
116- result = await db.scalars_all(stmt)
117-
118- # get
119- user = await db.get(User, 1 )
120-
121- # delete
122- user = User(id = 1 , name = ' test' )
123- await db.delete(user)
124-
125- # save(insert or update)
126- user = User(name = ' new_user' )
127- await db.save(user)
128-
129- # run_sync
130- await db.run_sync(Base.metadata.create_all, is_session = False )
131-
132- # session_maker
133- async with db.session_maker() as session:
134- user = await session.get(User, 1 )
135- ```
136-
13788## Database
13889
13990### Creation Connection
@@ -149,55 +100,6 @@ db = Database.create('sqlite:///amisadmin.db?check_same_thread=False') # sqlite
149100# db = Database.create('mssql+pyodbc://scott:tiger@mydsn') # SQL Server
150101```
151102
152- ### Shortcut functions
153-
154- ``` python
155- from sqlalchemy import insert, select, update, delete
156-
157-
158- def fast_execute ():
159- # update
160- stmt = update(User).where(User.id == 1 ).values({' username' : ' new_user' })
161- result = db.execute(stmt)
162-
163- # select
164- stmt = select(User).where(User.id == 1 )
165- user = db.execute(stmt, on_close_pre = lambda r : r.scalar())
166-
167- # insert
168- stmt = insert(User).values({' username' : ' User-6' , ' password' : ' password-6' })
169- result = db.execute(stmt)
170-
171- # delete
172- stmt = delete(User).where(User.id == 6 )
173- result = db.execute(stmt)
174-
175- # scalar
176- user = db.scalar(select(User).where(User.id == 1 ))
177-
178- # scalars_all
179- stmt = select(User)
180- result = db.scalars_all(stmt)
181-
182- # get
183- user = db.get(User, 1 )
184-
185- # delete
186- user = User(id = 1 , name = ' test' )
187- db.delete(user)
188-
189- # save(insert or update)
190- user = User(name = ' new_user' )
191- db.save(user)
192-
193- # run_sync
194- db.run_sync(Base.metadata.create_all, is_session = False )
195-
196- # session_maker
197- with db.session_maker() as session:
198- user = session.get(User, 1 )
199- ```
200-
201103## AbcAsyncDatabase
202104
203105When you are developing a library of tools, your Python program may require a database connection.
@@ -209,7 +111,7 @@ You can use asynchronous shortcut functions with the `async_` prefix.
209111` AsyncDatabase ` and ` Database ` both inherit from ` AbcAsyncDatabase ` and both implement the usual ` async_ ` prefixed asynchronous
210112shortcut functions.
211113
212- For example: ` async_execute ` ,` async_scalar ` ,` async_scalars_all ` ,` async_get ` ,` async_delete ` ,` async_run_sync ` .
114+ For example: ` async_execute ` ,` async_scalar ` ,` async_scalars ` ,` async_get ` ,` async_delete ` ,` async_run_sync ` .
213115
214116Remark: The ` async_ ` prefix in ` Database ` is implemented by executing the corresponding synchronous shortcut in the thread pool.
215117
@@ -240,9 +142,9 @@ async def fast_execute(db: Union[AsyncDatabase, Database]):
240142 # scalar
241143 user = await db.async_scalar(select(User).where(User.id == 1 ))
242144
243- # scalars_all
145+ # scalars
244146 stmt = select(User)
245- result = await db.async_scalars_all (stmt)
147+ result = await db.async_scalars (stmt)
246148
247149 # get
248150 user = await db.async_get(User, 1 )
@@ -251,10 +153,6 @@ async def fast_execute(db: Union[AsyncDatabase, Database]):
251153 user = User(id = 1 , name = ' test' )
252154 await db.async_delete(user)
253155
254- # save(insert or update)
255- user = User(name = ' new_user' )
256- await db.async_save(user)
257-
258156 # run_sync
259157 await db.async_run_sync(Base.metadata.create_all, is_session = False )
260158
@@ -306,6 +204,24 @@ async def get_user(id: int):
306204
307205```
308206
207+ ## Get session object
208+
209+ You can get the session object anywhere, but you need to manage the lifecycle of the session yourself. For example:
210+
211+ - 1.In FastAPI, you can use middleware or dependencies to get the session object. In the routing function, the method called will
212+ automatically get the session object in the context.
213+
214+ - 2.In the local work unit, you can use the ` with ` statement to get the session object. In the ` with ` statement, the method called
215+ will automatically get a new session object.
216+
217+ ``` mermaid
218+ graph LR
219+ session[Get session] --> scopefunc{Read context var}
220+ scopefunc -->|None| gSession[Return the global default session]
221+ scopefunc -->|Not a Session object| sSession[Return the scoped session corresponding to the current context variable]
222+ scopefunc -->|Is a Session object| cSession[Return session in the current context variable]
223+ ```
224+
309225## More tutorial documentation
310226
311227### [ sqlalchemy] ( https://github.com/sqlalchemy/sqlalchemy )
0 commit comments