19 Flask 数据库连接实战指南

19 Flask 数据库连接实战指南

在本节中,我们将学习如何在 Flask 项目中连接数据库。我们将使用 SQLAlchemy 作为 ORM(对象关系映射)工具来简化数据库操作。

安装所需库

首先,确保你已经安装了 Flask 和 Flask-SQLAlchemy。运行以下命令安装:

1
pip install Flask Flask-SQLAlchemy

创建 Flask 应用

接下来,我们将创建一个简单的 Flask 应用,并设置数据库连接。

1
2
3
4
5
6
7
8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' # 使用 SQLite 数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭修改跟踪

db = SQLAlchemy(app)

在上面的代码中,我们配置了一个 SQLite 数据库,数据库文件将被创建为 site.db

定义数据模型

接下来,我们需要定义我们的数据模型。假设我们正在开发一个博客应用,我们将创建一个简单的 Post 模型。

1
2
3
4
5
6
7
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=False)

def __repr__(self):
return f"Post('{self.title}', '{self.content}')"

在这个 Post 模型中,我们定义了三个字段:idtitlecontent

创建数据库

创建完模型后,我们需要生成数据库。我们可以通过以下代码初始化数据库:

1
2
3
@app.before_first_request
def create_tables():
db.create_all()

这样设置后,每当应用首次运行时,会自动创建所有定义的表。

添加示例数据

现在,让我们添加一些示例数据。我们可以在 Flask shell 中进行这个操作。

1
flask shell

在 Flask shell 中,输入以下代码:

1
2
3
4
5
6
from app import db, Post

# 创建新帖子
new_post = Post(title='我的第一篇文章', content='这是我的第一篇文章内容!')
db.session.add(new_post)
db.session.commit() # 提交到数据库

查询数据

现在我们已经有了数据,接下来我们来查询这些数据。

1
2
3
posts = Post.query.all()  # 查询所有帖子
for post in posts:
print(post.title, post.content)

Flask 路由示例

我们还可以将这个数据库操作与 Flask 路由结合起来,在浏览器中查看帖子。

1
2
3
4
@app.route('/')
def index():
posts = Post.query.all() # 查询所有帖子
return '<br>'.join([f"{post.title}: {post.content}" for post in posts])

在这个路由中,我们查询所有 Post 实例,并返回一个简单的 HTML 页面显示帖子标题和内容。

总结

在这一节中,我们学习了如何在 Flask 中连接数据库并执行基本的数据库操作。我们:

  • 安装了 Flask-SQLAlchemy
  • 创建了 Flask 应用并连接了 SQLite 数据库
  • 定义了数据模型
  • 创建了数据库表
  • 添加了和查询了数据

通过这些步骤,你可以轻松开始使用 Flask 进行数据库操作。继续深入学习,提升你的 Flask 开发技能!

20 ORM简介

20 ORM简介

在Flask开发中,ORM(对象关系映射)是一个非常重要的概念。它用来简化数据库操作,使得开发者可以通过面向对象的方式进行数据库交互,而不必编写复杂的SQL语句。Flask常用的ORM库是SQLAlchemy,下面我们来详细了解一下。

什么是ORM?

ORM的全称是“对象关系映射”。它的主要目的是将数据库中的表映射成对象类,从而让开发者能够更直观地操作数据库记录。例如,你可以将数据库中的User表映射成User类,通过User类的实例来访问或修改表中的数据。

ORM的优势:

  • 简化操作:开发者可以使用Python对象和方法,而不是手动编写SQL。
  • 提高可读性:代码更加易于理解,符合面向对象的编程风格。
  • 数据库无关性:通过ORM,可以更容易地改变底层数据库,而不必修改大量的SQL代码。

Flask和SQLAlchemy集成

Flask集成SQLAlchemy非常简单。首先,你需要安装Flask-SQLAlchemy

1
pip install Flask-SQLAlchemy

然后,你可以在Flask应用中设置数据库连接和模型。

示例代码

接下来,我们将创建一个简单的Flask应用来展示如何使用ORM。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

# 定义一个User模型
class User(db.Model):
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)

def __repr__(self):
return f'<User {self.username}>'

# 创建数据库
with app.app_context():
db.create_all()

# 添加用户
def add_user(username, email):
new_user = User(username=username, email=email)
db.session.add(new_user)
db.session.commit()

# 查询用户
def get_users():
return User.query.all()

if __name__ == '__main__':
app.run(debug=True)

使用ORM进行基本操作

添加记录

在上面的示例中,我们定义了一个add_user函数来添加用户。你可以调用这个函数来向数据库添加新用户:

1
2
add_user('alice', 'alice@example.com')
add_user('bob', 'bob@example.com')

查询记录

要查询所有用户,你可以使用get_users函数:

1
2
3
users = get_users()
for user in users:
print(user) # 输出: <User alice> <User bob>

更新记录

如果需要更新某个用户的信息,首先要查询出该用户,然后修改其属性并提交:

1
2
3
4
5
def update_user(old_username, new_username):
user = User.query.filter_by(username=old_username).first()
if user:
user.username = new_username
db.session.commit()

删除记录

同样,删除一条记录也很简单:

1
2
3
4
5
def delete_user(username):
user = User.query.filter_by(username=username).first()
if user:
db.session.delete(user)
db.session.commit()

总结

ORM的使用为Flask应用提供了更为直观且便利的数据库操作方式。通过使用SQLAlchemy,我们可以轻松地进行数据的增删改查,而无需编写冗长的SQL语句。掌握ORM的使用,将帮助你更高效地进行Flask开发。

21 Flask CRUD 操作实战指南

21 Flask CRUD 操作实战指南

在本节中,我们将通过一个具体的案例来学习如何在 Flask 中实现基本的 CRUD(创建、读取、更新、删除)操作。我们将以一个简单的用户管理系统为例。

创建 Flask 项目

首先,确保你已经安装了 Flask,可以使用以下命令安装:

1
pip install Flask Flask-SQLAlchemy

接下来,创建一个新的 Flask 项目目录,并在该目录下创建一个 app.py 文件。

1
2
3
mkdir flask_crud
cd flask_crud
touch app.py

app.py 中写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

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

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
age = db.Column(db.Integer, nullable=False)

db.create_all()

创建用户(Create)

接下来,我们添加一个路由来处理用户的创建。通过 POST 请求可以创建新的用户。

1
2
3
4
5
6
7
@app.route('/users', methods=['POST'])
def create_user():
data = request.json
new_user = User(name=data['name'], age=data['age'])
db.session.add(new_user)
db.session.commit()
return jsonify({'id': new_user.id, 'name': new_user.name, 'age': new_user.age}), 201

测试创建用户

使用 curl 或 Postman 测试创建用户的功能:

1
curl -X POST http://127.0.0.1:5000/users -H "Content-Type: application/json" -d '{"name": "Alice", "age": 25}'

读取用户(Read)

现在,添加一个路由来获取用户信息。我们可以用 GET 请求来读取所有用户的信息。

1
2
3
4
@app.route('/users', methods=['GET'])
def get_users():
users = User.query.all()
return jsonify([{'id': user.id, 'name': user.name, 'age': user.age} for user in users]), 200

测试读取用户

使用以下命令获取所有用户:

1
curl http://127.0.0.1:5000/users

更新用户(Update)

要更新用户的信息,我们需要添加一个新的路由,支持 PUT 请求。

1
2
3
4
5
6
7
8
@app.route('/users/<int:id>', methods=['PUT'])
def update_user(id):
data = request.json
user = User.query.get_or_404(id)
user.name = data['name']
user.age = data['age']
db.session.commit()
return jsonify({'id': user.id, 'name': user.name, 'age': user.age}), 200

测试更新用户

你可以使用以下命令更新用户的信息:

1
curl -X PUT http://127.0.0.1:5000/users/1 -H "Content-Type: application/json" -d '{"name": "Alice Updated", "age": 26}'

删除用户(Delete)

最后,我们需要一个路由来处理用户的删除。通过 DELETE 请求可以删除特定的用户。

1
2
3
4
5
6
@app.route('/users/<int:id>', methods=['DELETE'])
def delete_user(id):
user = User.query.get_or_404(id)
db.session.delete(user)
db.session.commit()
return jsonify({'message': 'User deleted'}), 204

测试删除用户

使用以下命令来删除用户:

1
curl -X DELETE http://127.0.0.1:5000/users/1

启动 Flask 应用

在文件的末尾添加以下代码以启动 Flask 应用:

1
2
if __name__ == '__main__':
app.run(debug=True)

总结

在本节中,我们创建了一个简单的 Flask 应用,成功实现了 CRUD 操作。通过这个案例,我们学习如何使用 Flask 提供的路由,处理请求和与 SQLite 数据库进行交互。你可以根据需求扩展这个应用,增加更多功能和复杂性。