如何查看部署在Heroku上的Flask Web应用的数据库内容
Heroku部署Flask应用后查询注册用户的常用方案
Heroku 底层 dyno 实例的文件系统是临时性的,每次实例重启、部署更新都会清空所有本地生成的文件。如果你上线后仍然使用本地SQLite存储用户数据,不仅历史注册数据大概率已经丢失,新注册的用户信息也会随时清空,建议优先切换为Heroku提供的托管数据库服务。
1. 仍使用本地SQLite的临时查询方案(极不推荐,仅适用于临时测试场景)
当前dyno运行期间新产生的SQLite数据可以通过以下方式临时查询:
- 本地先安装Heroku CLI,终端执行
heroku login登录你的Heroku账号 - 执行
heroku ps:exec -a 你的应用名进入当前运行的dyno的shell环境 - 找到项目内SQLite文件的存放路径,用内置sqlite3工具直接执行查询,示例命令:
sqlite3 your_database.sqlite "SELECT username,email,register_time FROM users;"
注意:该方式只能查到当前dyno启动后新产生的数据,重启前的历史SQLite数据完全无法找回
2. 切换为Heroku托管数据库后的查询方案(推荐,生产环境必须使用)
切换为Heroku官方提供的Postgres等持久化托管数据库后,你可以用以下几种稳定方式查询用户名单:
- 通过Heroku CLI直接操作数据库
本地登录Heroku账号后,直接执行heroku pg:psql -a 你的应用名即可进入Postgres交互式命令行,执行SQL查询即可获取所有用户数据,示例查询语句:SELECT username, email, created_at FROM users ORDER BY created_at DESC; - 在Flask应用内新增私有管理路由
可以写一个仅管理员账号可访问的路由,内部执行用户表查询逻辑,访问对应路径即可直接查看用户名单,示例逻辑参考:
使用该方案务必做好权限校验,避免敏感用户信息泄露from flask_login import login_required, current_user from your_app import db from your_app.models import User @app.route('/admin/get-all-users') @login_required def get_all_users(): # 提前给管理员账号加is_admin标识做权限校验 if not current_user.is_admin: return "权限不足", 403 all_users = User.query.all() return "<br>".join([f"用户名:{u.username} | 注册邮箱:{u.email} | 注册时间:{u.created_at}" for u in all_users]) - 本地数据库客户端连接查询
在Heroku应用后台的数据库配置页获取完整的数据库连接凭据,用本地的DBeaver、Navicat等数据库可视化客户端直接连接Heroku托管数据库,操作和本地数据库完全一致,可以可视化导出、查询所有用户数据。
内容的提问来源于stack exchange,提问作者vedant shinde
相关产品推荐
相关产品推荐

