Flask 连接数据库基本操作
1. 数据库连接
在 Flask 中连接数据库是一项常见任务。我们可以使用 SQLAlchemy 扩展来连接 MySQL 数据库。下面是一个连接 MySQL 数据库的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pymysql
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 公共方法连接数据库
def connect_flask_mysql(app, username="root", password="123456", host='127.0.0.1', port=3306, db='flask_study'):
app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
return db
# 连接 MySQL 数据库
db = connect_flask_mysql(app) # 将数据库连接对象保存为 db
2. 创建数据表单
在 Flask 中,我们可以使用 SQLAlchemy 来创建数据表单。下面是一个创建书籍信息数据表的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Book(db.Model):
__tablename__ = 'books'
id = db.Column(db.Integer, primary_key=True)
category = db.Column(db.String(100), nullable=False)
title = db.Column(db.String(100), nullable=False)
price = db.Column(db.Float, nullable=False)
region = db.Column(db.String(100), nullable=False)
def __repr__(self):
return f"<Book {self.title}>"
# 创建数据库和表
with app.app_context():
db.create_all()
3. 添加书籍信息
Flask 提供了路由函数来处理不同的 URL 请求。下面是一个将书籍信息添加到数据库的示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@app.route('/create_book')
def create_book():
import random
categories = ['科幻', '小说', '历史', '教育'] # 图书分类列表
titles=['三体','三国演义','双人成行','未成年早期教育']
regions=['A01','Z03','h22','l99']
new_book = Book(
category=random.choice(categories),
title=random.choice(titles),
price=random.uniform(10.0, 100.0),
region=random.choice(regions)
)
db.session.add(new_book)
db.session.commit()
return f"Book created successfully! {new_book.title}"
4. 查询书籍信息
我们可以使用 SQLAlchemy 的查询功能来从数据库中获取书籍信息。下面是一个查询所有书籍信息并显示在网页上的示例代码:
1
2
3
4
@app.route('/')
def get_books():
books = Book.query.all()
return render_template('books_manage.html', books=books)
5. 更新书籍信息
我们可以使用路由函数来处理更新书籍信息的请求。下面是一个将书籍标题更新为 “New Title” 的示例代码:
1
2
3
4
5
6
7
8
9
@app.route('/update_book/<int:book_id>')
def update_book(book_id):
book = Book.query.get(book_id)
if book:
book.title = "New Title"
db.session.commit()
return f"Book {book_id} updated successfully!"
else:
return f"Book {book_id} not found."
6. 删除书籍信息
类似于更新书籍信息,我们可以使用路由函数来处理删除书籍的请求。下面是一个删除书籍信息的示例代码:
1
2
3
4
5
6
7
8
9
@app.route('/delete_book/<int:book_id>')
def delete_book(book_id):
book = Book.query.get(book_id)
if book:
db.session.delete(book)
db.session.commit()
return f"Book {book_id} deleted successfully!"
else:
return f"Book {book_id} not found."
7. 模板渲染
Flask 使用 Jinja2 模板引擎来渲染网页模板。下面是一个简单的图书列表网页模板示例:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!DOCTYPE html>
<html>
<head>
<title>图书管理系统</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
padding: 8px;
text-align: left;
border-bottom: 1px solid #ddd;
}
tr:hover {background-color:#f5f5f5;}
.button-container {
margin-top: 10px;
}
</style>
</head>
<body>
<h1>图书管理系统</h1>
<!-- 创建图书表单 -->
<form action="/create_book" method="get">
<input type="submit" value="创建图书">
</form>
<!-- 图书列表 -->
<h2>图书列表</h2>
<table>
<tr>
<th>分类</th>
<th>书名</th>
<th>价格</th>
<th>区域</th>
<th>操作</th>
</tr>
{% for book in books %}
<tr>
<td>{{ book.category }}</td>
<td>{{ book.title }}</td>
<td>{{ book.price }}</td>
<td>{{ book.region }}</td>
<td>
<a href="/update_book/{{ book.id }}">编辑</a>
<a href="/delete_book/{{ book.id }}" onclick="return confirmDelete()">删除</a>
</td>
</tr>
{% endfor %}
</table>
<script>
function confirmDelete() {
return confirm("确定删除该图书吗?");
}
</script>
</body>
</html>
8. 效果图
以上是关于 Flask 基本操作的示例代码和效果图,希望对你的学习有所帮助!