首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flask与MySQL数据库集成

Flask与MySQL数据库集成

作者头像
用户8589624
发布2025-11-15 19:20:06
发布2025-11-15 19:20:06
1280
举报
文章被收录于专栏:nginxnginx

Flask与MySQL数据库集成

第一部分:MySQL 8安装与配置

1. MySQL 8安装指南
Windows平台安装

下载MySQL安装包

  • 访问MySQL官网(https://dev.mysql.com/downloads/installer/)
  • 下载MySQL Installer for Windows

安装步骤

代码语言:javascript
复制
# 1. 运行安装程序,选择"Developer Default"安装类型
# 2. 在安装过程中设置root用户密码(建议使用强密码)
# 3. 配置MySQL服务端口(默认3306)
# 4. 完成安装后,将MySQL的bin目录添加到系统PATH环境变量

验证安装

代码语言:javascript
复制
mysql --version
# 应该显示类似: mysql  Ver 8.0.xx for Win64 on x86_64 (MySQL Community Server - GPL)
macOS平台安装

使用Homebrew安装

代码语言:javascript
复制
brew install mysql
brew services start mysql

安全配置

代码语言:javascript
复制
mysql_secure_installation
Linux平台安装

以Ubuntu为例:

代码语言:javascript
复制
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation
2. 创建Flask应用数据库
代码语言:javascript
复制
-- 登录MySQL
mysql -u root -p

-- 创建专用数据库
CREATE DATABASE flask_demo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建应用专用用户
CREATE USER 'flask_user'@'localhost' IDENTIFIED BY 'secure_password';

-- 授权
GRANT ALL PRIVILEGES ON flask_demo.* TO 'flask_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

第二部分:Flask连接MySQL数据库

1. 安装必要依赖
代码语言:javascript
复制
pip install pymysql flask-sqlalchemy
2. 基础配置

app.py中添加数据库配置:

代码语言:javascript
复制
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 配置数据库连接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://flask_user:secure_password@localhost:3306/flask_demo'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ECHO'] = True  # 开发时显示SQL语句

db = SQLAlchemy(app)
3. 定义第一个模型
代码语言:javascript
复制
class User(db.Model):
    __tablename__ = 'users'
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    created_at = db.Column(db.DateTime, server_default=db.func.now())
    
    def __repr__(self):
        return f'<User {self.username}>'

class Post(db.Model):
    __tablename__ = 'posts'
    
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(120), nullable=False)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    
    author = db.relationship('User', backref=db.backref('posts', lazy=True))
    
    def __repr__(self):
        return f'<Post {self.title}>'
4. 初始化数据库

创建init_db.py文件:

代码语言:javascript
复制
from app import app, db

with app.app_context():
    db.create_all()
    print("数据库表已创建!")

运行:

代码语言:javascript
复制
python init_db.py
5. 基本CRUD操作
创建记录
代码语言:javascript
复制
@app.route('/add_user')
def add_user():
    new_user = User(username='张三', email='zhangsan@example.com')
    db.session.add(new_user)
    db.session.commit()
    return '用户添加成功!'
查询记录
代码语言:javascript
复制
@app.route('/users')
def list_users():
    users = User.query.all()  # 获取所有用户
    return render_template('users.html', users=users)

@app.route('/user/<username>')
def show_user(username):
    user = User.query.filter_by(username=username).first_or_404()
    return render_template('user.html', user=user)
更新记录
代码语言:javascript
复制
@app.route('/update_email/<username>/<new_email>')
def update_email(username, new_email):
    user = User.query.filter_by(username=username).first()
    if user:
        user.email = new_email
        db.session.commit()
        return '邮箱更新成功!'
    return '用户不存在!'
删除记录
代码语言:javascript
复制
@app.route('/delete_user/<username>')
def delete_user(username):
    user = User.query.filter_by(username=username).first()
    if user:
        db.session.delete(user)
        db.session.commit()
        return '用户删除成功!'
    return '用户不存在!'
6. 高级查询示例
代码语言:javascript
复制
# 分页查询
@app.route('/posts/<int:page>')
def show_posts(page=1):
    per_page = 10
    pagination = Post.query.order_by(Post.id.desc()).paginate(page, per_page, error_out=False)
    return render_template('posts.html', pagination=pagination)

# 复杂查询
@app.route('/search')
def search():
    keyword = request.args.get('q', '')
    results = Post.query.filter(
        (Post.title.contains(keyword)) | 
        (Post.content.contains(keyword))
    ).join(User).filter(User.username == '张三').all()
    return render_template('search.html', results=results)
7. 数据库迁移配置

安装Flask-Migrate:

代码语言:javascript
复制
pip install flask-migrate

配置迁移:

代码语言:javascript
复制
from flask_migrate import Migrate

migrate = Migrate(app, db)

初始化迁移仓库:

代码语言:javascript
复制
flask db init

创建迁移脚本:

代码语言:javascript
复制
flask db migrate -m "initial migration"

应用迁移:

代码语言:javascript
复制
flask db upgrade

第三部分:最佳实践与安全建议

连接池配置

代码语言:javascript
复制
app.config['SQLALCHEMY_POOL_SIZE'] = 20
app.config['SQLALCHEMY_POOL_TIMEOUT'] = 300
app.config['SQLALCHEMY_POOL_RECYCLE'] = 3600

敏感信息保护

使用环境变量存储数据库密码

创建.env文件:

代码语言:javascript
复制
DB_USER=flask_user
DB_PASS=secure_password

修改配置:

代码语言:javascript
复制
import os
from dotenv import load_dotenv

load_dotenv()
app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{os.getenv('DB_USER')}:{os.getenv('DB_PASS')}@localhost:3306/flask_demo"

性能优化

代码语言:javascript
复制
# 批量插入
db.session.bulk_insert_mappings(User, [
    {'username': 'user1', 'email': 'user1@example.com'},
    {'username': 'user2', 'email': 'user2@example.com'}
])

# 只查询需要的列
users = db.session.query(User.username, User.email).all()

错误处理

代码语言:javascript
复制
@app.route('/safe_delete/<int:user_id>')
def safe_delete(user_id):
    try:
        user = User.query.get_or_404(user_id)
        db.session.delete(user)
        db.session.commit()
        return '删除成功'
    except Exception as e:
        db.session.rollback()
        app.logger.error(f'删除用户失败: {str(e)}')
        return '删除失败', 500

总结

本篇教程详细介绍了:

  1. MySQL 8在不同平台上的安装与配置
  2. Flask与MySQL数据库的连接配置
  3. 使用SQLAlchemy进行数据建模
  4. 基本的CRUD操作实现
  5. 高级查询与分页技术
  6. 数据库迁移管理
  7. 生产环境最佳实践

通过这些知识,你已经能够在Flask应用中集成MySQL数据库,实现数据的持久化存储。在下一篇专栏中,我们将探讨更高级的ORM特性、性能优化技巧以及多数据库连接等主题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flask与MySQL数据库集成
    • 第一部分:MySQL 8安装与配置
      • 1. MySQL 8安装指南
      • 2. 创建Flask应用数据库
    • 第二部分:Flask连接MySQL数据库
      • 1. 安装必要依赖
      • 2. 基础配置
      • 3. 定义第一个模型
      • 4. 初始化数据库
      • 5. 基本CRUD操作
      • 6. 高级查询示例
      • 7. 数据库迁移配置
    • 第三部分:最佳实践与安全建议
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档