Performance: Async database with databases library
This affects how quickly the server can handle database queries without blocking other requests, improving responsiveness and throughput.
Jump into concepts and practice - no test required
import databases import sqlalchemy from fastapi import FastAPI db = databases.Database('sqlite:///test.db') app = FastAPI() @app.on_event('startup') async def startup(): await db.connect() @app.on_event('shutdown') async def shutdown(): await db.disconnect() @app.get('/items') async def read_items(): query = 'SELECT * FROM items' results = await db.fetch_all(query) return results
import databases import sqlalchemy from fastapi import FastAPI db = databases.Database('sqlite:///test.db') app = FastAPI() @app.get('/items') def read_items(): query = 'SELECT * FROM items' results = db.fetch_all(query) return results
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Synchronous DB calls in FastAPI | N/A | N/A | N/A | [X] Bad |
| Async DB calls with databases library | N/A | N/A | N/A | [OK] Good |
databases library with FastAPI for database operations?databases librarydatabases library allows async database queries, so the app doesn't wait for the database to respond before continuing.databases library in FastAPI?databases library requires awaiting the connect method because it is asynchronous.await database.connect(). Calling without await or wrong method names causes errors.databases library, what will be printed when the endpoint is called?import databases
from fastapi import FastAPI
database = databases.Database('sqlite:///test.db')
app = FastAPI()
@app.on_event('startup')
async def startup():
await database.connect()
@app.on_event('shutdown')
async def shutdown():
await database.disconnect()
@app.get('/')
async def read_data():
query = 'SELECT 1 as number'
result = await database.fetch_one(query)
print(result['number'])
return {'number': result['number']}databases library:import databases
from fastapi import FastAPI
database = databases.Database('sqlite:///test.db')
app = FastAPI()
@app.on_event('startup')
async def startup():
await database.connect()
@app.on_event('shutdown')
async def shutdown():
await database.disconnect()
@app.get('/')
async def read_data():
query = 'SELECT 1 as number'
result = database.fetch_one(query)
return {'number': result['number']}fetch_one method is async and must be awaited to get the result properly.database.fetch_one(query) without await, which causes a runtime error because the coroutine is not awaited.databases library in FastAPI. Which code snippet correctly fetches all rows and returns them as a list of dictionaries?database = databases.Database('sqlite:///test.db')
async def get_users():
query = 'SELECT * FROM users'
# Which line correctly fetches all rows?
???
return usersfetch_all returns all rows as a list; fetch_one returns a single row.fetch_all is async, it must be awaited to get the result.