返回

轻松掌握Flask数据库连接:sqlite、mysql轻松搞定!

后端

Flask 数据库连接指南:轻松搞定 SQLite 和 MySQL

一、连接 SQLite 数据库

1. 安装 SQLite3

首先,使用 pip 安装 SQLite3 库:

pip install sqlite3

2. 创建数据库连接

在 Flask 应用中,使用以下代码创建 SQLite 数据库连接:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydb.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

3. 创建数据模型

使用 SQLAlchemy 定义数据模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(120))

4. 操作数据库

使用 SQLAlchemy 执行 CRUD 操作:

# 添加数据
user = User(username='admin', password='password')
db.session.add(user)
db.session.commit()

# 查询数据
users = User.query.all()

# 更新数据
user = User.query.filter_by(username='admin').first()
user.password = 'new_password'
db.session.commit()

# 删除数据
user = User.query.filter_by(username='admin').first()
db.session.delete(user)
db.session.commit()

二、连接 MySQL 数据库

1. 安装 PyMySQL

pip install pymysql

2. 创建数据库连接

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/mydb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

3. 创建数据模型

定义 MySQL 数据模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(120))

4. 操作数据库

# 添加数据
user = User(username='admin', password='password')
db.session.add(user)
db.session.commit()

# 查询数据
users = User.query.all()

# 更新数据
user = User.query.filter_by(username='admin').first()
user.password = 'new_password'
db.session.commit()

# 删除数据
user = User.query.filter_by(username='admin').first()
db.session.delete(user)
db.session.commit()

三、解决 "RuntimeError: Working outside of application context" 错误

方法 1: 在视图函数中使用 Flask 的 g 对象:

@app.route('/')
def index():
    db = g.get('db')
    if db is None:
        db = SQLAlchemy(app)
        g.db = db
    users = db.session.query(User).all()
    return render_template('index.html', users=users)

方法 2: 在 Flask 应用工厂函数中初始化数据库连接:

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydb.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    db = SQLAlchemy(app)
    return app

四、常见问题解答

  1. 如何确保数据库连接安全?

    • 使用 SSL 加密连接。
    • 使用强密码。
    • 限制数据库访问权限。
  2. 我如何处理数据库错误?

    • 使用异常处理程序来捕获错误。
    • 记录错误信息以进行调试。
  3. 我可以将 Flask 与其他数据库一起使用吗?

    • 是的,Flask 支持多种数据库,例如 PostgreSQL、MongoDB 和 Oracle。
  4. 如何优化数据库查询?

    • 使用索引来加快查询速度。
    • 避免不必要的联接。
    • 使用分页和缓存技术。
  5. 如何使用 SQL Alchemy 进行高级查询?

    • 使用 SQLAlchemy 的查询表达式来构建复杂查询。
    • 使用 JOIN、GROUP BY 和 HAVING 子句。