当前位置:首页 > 云服务器 > 正文

Flask界面数据库怎么连接,有哪些方法?

Flask 与数据库的集成

Flask 是一个轻量级 Python Web 框架,本身不提供数据库支持,但通过扩展可轻松与数据库交互,最常见的方式是使用 Flask-SQLAlchemy,它整合了 SQLAlchemy ORM,简化了数据库操作。

安装与配置

首先安装所需扩展:

pip install flask flask-sqlalchemy

在 Flask 应用中配置数据库连接,例如使用 SQLite:

from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)

定义模型

模型对应数据库表,继承 db.Model:

Flask界面数据库怎么连接,有哪些方法? 第1张

创建表:在 Python 交互环境或应用上下文中执行 db.create_all()。

构建界面与数据库操作

通过 Flask 路由函数执行 CRUD 操作,并利用模板渲染结果显示给用户。

新增数据(Create)

@app.route('/add_user') def add_user(): user = User(username='test', email='test@example.com') db.session.add(user) db.session.commit() return 'User added'

查询数据(Read)

@app.route('/users') def users(): all_users = User.query.all() return render_template('users.html', users=all_users)

模板示例(users.html):

Flask界面数据库怎么连接,有哪些方法? 第2张

更新与删除(Update / Delete)

@app.route('/update_user/<int:id>') def update_user(id): user = User.query.get(id) user.username = 'new_name' db.session.commit() return 'User updated' @app.route('/delete_user/<int:id>') def delete_user(id): user = User.query.get(id) db.session.delete(user) db.session.commit() return 'User deleted'

使用表单处理用户输入

集成 Flask-WTFWTForms 可以更安全地处理表单数据:

from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired class UserForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired()]) submit = SubmitField('Add User')

在模板中渲染表单,并在路由中验证和保存数据。

常见数据库类型与配置

数据库 URI 格式示例
SQLite sqlite:///path/to/db.sqlite
PostgreSQL postgresql://user:pass@localhost/mydb
MySQL mysql://user:pass@localhost/mydb

相关优化建议

  • 迁移管理:使用 Flask-Migrate 基于 Alembic 管理数据库版本变更。
  • 连接池:生产环境建议使用数据库连接池(如 SQLAlchemy 内置)。
  • 安全性:避免 SQL 载入,始终使用 ORM 或参数化查询。


相关问题与解答

问题 1:Flask 中如何连接多个数据库?

可以通过配置多个 SQLALCHEMY_BINDS 实现。

app.config['SQLALCHEMY_BINDS'] = { 'users': 'sqlite:///users.db', 'posts': 'sqlite:///posts.db' }

在模型中使用 __bind_key__ 属性指定绑定:

class User(db.Model): __bind_key__ = 'users' # ... class Post(db.Model): __bind_key__ = 'posts' # ...

操作时,Flask-SQLAlchemy 会自动路由到正确的数据库。

问题 2:Flask 应用与数据库交互时,如何防止会话资源泄漏?

建议使用 try/finally 或 with 语句确保会话关闭,Flask-SQLAlchemy 默认会在请求结束时自动关闭会话,但若使用原生 SQLAlchemy 或手动管理,可借助 teardown_appcontext 装饰器处理:

@app.teardown_appcontext def shutdown_session(exception=None): db.session.remove()

在长期运行的任务中,应显式调用 db.session.close() 并配合会话作用域(如 scoped_session)来管理线程安全。

Flask界面数据库怎么连接,有哪些方法? 第3张

0