为了详细讲解Flask数据库的连接与使用的攻略,我们需要分为以下几个步骤:
1. 安装Flask扩展
在使用Flask之前,我们需要先安装一些必要的扩展。对于连接数据库来说,常用的扩展是Flask-SQLAlchemy
和Flask-MySQLdb
。
pip install flask_sqlalchemy
pip install flask-mysqldb
2. 建立数据库连接
在代码中,我们需要先创建一个数据库连接。可以通过如下方式创建一个连接:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@ipaddr:port/db_name'
db = SQLAlchemy(app)
其中,username
和password
分别是数据库账号和密码,ipaddr
是数据库地址,port
是端口号,db_name
是要连接的数据库名称。
如果要使用sqlite
数据库,则可以按照如下方式创建连接:
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
3. 定义数据模型
在Flask中使用数据库,我们需要定义数据模型。可以通过继承db.Model
类来定义数据模型。例如,我们定义一个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)
password = db.Column(db.String(120), nullable=False)
上述代码中,User
模型继承了db.Model
类,定义了id
、username
、email
、password
四个字段。
4. 数据库迁移
当我们定义数据模型后,我们需要对数据库进行迁移。可以使用Flask-Migrate
扩展来实现数据库迁移。常用的命令有:
# 初始化
flask db init
# 生成迁移脚本
flask db migrate
# 执行迁移脚本
flask db upgrade
5. 数据库操作
在数据库连接和数据模型定义完成后,我们可以进行数据库操作了。具体操作包括增删改查,例如:
user = User(username='test', email='test@test.com', password='123456')
db.session.add(user)
db.session.commit()
上述代码中,我们创建了一个User
对象,并添加到数据库中。
user = User.query.filter_by(username='test').first()
user.email = 'new_email@test.com'
db.session.commit()
上述代码中,我们通过filter_by
方法查询了一个username为test
的用户,并对其邮箱地址进行修改。
6. 示例说明
在以上步骤完整的基础上,我们进一步给出两个示例进行说明。
示例一
假设我们要实现一个用户认证系统。用户注册时需要提供用户名、邮箱和密码,我们使用MySQL数据库存储用户信息。
from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@ipaddr:port/db_name'
db = SQLAlchemy(app)
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)
password = db.Column(db.String(120), nullable=False)
@app.route('/register', methods=['POST'])
def register():
username = request.form.get('username')
email = request.form.get('email')
password = request.form.get('password')
if not username or not email or not password:
return '参数错误'
user = User(username=username, email=email, password=password)
db.session.add(user)
db.session.commit()
return '注册成功'
if __name__ == '__main__':
app.run()
上述代码中,我们定义了一个/register
路由,用户在该路由下发送POST请求时,将注册信息保存到数据库中。
示例二
假设我们要实现一个博客网站。博客文章需要分页展示,我们使用SQLite数据库存储文章信息。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(80), nullable=False)
body = db.Column(db.Text, nullable=False)
@app.route('/blog')
def blog():
page = request.args.get('page', default=1, type=int)
per_page = 10
pagination = Post.query.order_by(Post.id.desc()).paginate(page=page, per_page=per_page)
posts = pagination.items
return render_template('blog.html', posts=posts, pagination=pagination)
if __name__ == '__main__':
app.run()
上述代码中,我们定义了一个/blog
路由,该路由下展示博客文章列表。我们使用Post.query.order_by(Post.id.desc())
查询文章,并使用pagination = Post.query.paginate(page=page, per_page=per_page)
进行分页。
以上就是Flask数据库的连接与使用的详细攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Flask数据库的连接与使用 - Python技术站