返回
轻松掌握Flask数据库连接:sqlite、mysql轻松搞定!
后端
2023-12-14 18:14:38
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
四、常见问题解答
-
如何确保数据库连接安全?
- 使用 SSL 加密连接。
- 使用强密码。
- 限制数据库访问权限。
-
我如何处理数据库错误?
- 使用异常处理程序来捕获错误。
- 记录错误信息以进行调试。
-
我可以将 Flask 与其他数据库一起使用吗?
- 是的,Flask 支持多种数据库,例如 PostgreSQL、MongoDB 和 Oracle。
-
如何优化数据库查询?
- 使用索引来加快查询速度。
- 避免不必要的联接。
- 使用分页和缓存技术。
-
如何使用 SQL Alchemy 进行高级查询?
- 使用 SQLAlchemy 的查询表达式来构建复杂查询。
- 使用 JOIN、GROUP BY 和 HAVING 子句。