python fastapi 将SQLITE3数据库中全部内容在html显示,并可以在html页面中修改数据,点击保存后,更新这些数据到数据库中
时间: 2024-09-29 14:02:13 浏览: 43
FastAPI是一个轻量级的框架,用于构建现代RESTful APIs,而SQLite3是一种轻型的关系型数据库。要在FastAPI应用中结合它们并实现在HTML页面上展示和编辑SQLite3数据,你需要进行以下步骤:
1. **安装必要的库**:
- `sqlalchemy` (用于操作SQLite3)
- `alembic` (可选,用于数据库迁移)
- `jinja2` 和 `html-webpack-plugin` (用于前端模板和静态文件管理)
2. **设置数据库连接**:
使用SQLAlchemy创建一个SQLite3引擎,然后创建相应的模型(表结构)。
```python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite:///example.db')
```
3. **定义数据模型**:
定义一个代表数据库表格的Python类。
```python
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
```
4. **创建FastAPI路由**:
- 获取所有用户:
```python
@router.get('/')
async def get_users():
with engine.connect() as connection:
result = connection.execute(User.__table__.select())
users = [User.from_dict(row) for row in result.fetchall()]
return {'users': users}
```
- 显示和编辑HTML模板:
使用Jinja2模板,在`templates`目录下创建`index.html`文件:
```html
<table>
{% for user in users %}
<tr>
<td>{{ user.id }}</td>
<td><input type="text" value="{{ user.name }}" /></td>
<td><input type="email" value="{{ user.email }}" /></td>
<td><button onclick="updateUser({{ user.id }})">Save</button></td>
</tr>
{% endfor %}
</table>
```
5. **处理前端交互**:
- 创建一个JavaScript函数`updateUser`,当用户点击“Save”按钮时,从输入框获取值并发送POST请求更新数据库。
6. **处理更新操作**:
- 添加一个POST路由接收前端的数据更新:
```python
@router.post('/update/{id}')
async def update_user(id: int, updated_data: dict):
# 根据id找到对应用户并更新数据库
with engine.begin() as conn:
stmt = User.update().where(User.id == id).values(updated_data)
conn.execute(stmt)
return {"status": "updated"}
```
7. **启动FastAPI**:
通过`uvicorn`启动应用:
```bash
uvicorn main:app --reload
```
阅读全文