1. 什么是Flask-SQLAlchemy
Flask-SQLAlchemy是一个可以在Flask应用程序中使用的SQLAlchemy扩展。SQLAlchemy是Python中最流行和功能最强大的ORM(对象关系映射)库之一。ORM库可以使Python应用程序能够更轻松地与关系型数据库进行交互。
Flask-SQLAlchemy是使用Flask和SQLAlchemy的最佳方式之一。 Flask-SQLAlchemy提供了一些有用的功能,例如:自动管理数据库连接、自动创建和更新数据库模型、自动处理多进程应用程序中的线程安全等问题。
2. 安装Flask-SQLAlchemy
在开始使用Flask-SQLAlchemy之前,我们需要安装它。可以使用pip来执行安装,如下所示:
pip install Flask-SQLAlchemy
3. 如何使用Flask-SQLAlchemy进行数据库操作
3.1 配置数据库连接
在Flask应用程序中使用Flask-SQLAlchemy之前,我们需要将应用程序配置为连接到数据库。因此在Flask中使用Flask-SQLAlchemy需要在应用程序中定义数据库连接字符串,这通常称为数据库URI。URI是一种格式字符串,用于描述如何连接到数据库。
在配置应用程序之前,需要先在电脑上安装并启动数据库。在此过程中,通常会为数据库设置登录用户名和密码。
在Flask-SQLAlchemy中,URI存储在Flask应用程序的配置对象中。可以在应用程序的配置文件中定义数据库URI。通常情况下,这些文件被命名为config.py并位于应用程序的根目录中。
对于SQLite数据库,可以使用以下的URI:
SQLALCHEMY_DATABASE_URI = 'sqlite:////absolute/path/to/db/file'
对于PostgreSQL数据库,可以使用以下URI:
SQLALCHEMY_DATABASE_URI = 'postgresql://username:password@hostname/database'
3.2 定义模型
在Flask-SQLAlchemy中,可以使用Python类定义数据库表结构。这些类被称为“模型”。Flask-SQLAlchemy根据这些模型自动创建数据库表。
每个模型都是Python类,并定义为继承自于db.Model。模型中的变量用来定义表中的列。每个列都是类变量并且由 sqlalchemy.Column 类型定义。
以下是一个简单的Flask-SQLAlchemy模型的例子:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
3.3 创建数据库表
在定义了模型之后,我们需要告诉Flask-SQLAlchemy创建数据库表。可以使用db.create_all()来执行此操作。
代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Define the model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
# Create the database tables
db.create_all()
3.4 CRUD操作
3.4.1 创建
在Flask中使用SQLAlchemy的过程中,创建记录是一个简单的操作。只需要创建一个模型类实例并调用db.session.add()方法,并最后使用db.session.commit()将更改保存到数据库中。
代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Define the model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
# Create a new user
new_user = User(username='John Doe', email='johndoe@example.com')
db.session.add(new_user)
db.session.commit()
3.4.2 读取
要从数据库中读取数据,可以使用db.session.query()方法。可以在query()方法中传递模型类来读取数据。此外,可以使用filter()方法过滤查询结果。
以下代码演示了如何从数据库中读取所有用户的数据:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Define the model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
# Retrieve all users
users = db.session.query(User).all()
for user in users:
print(user.username)
3.4.3 更新
要更新数据库中的记录,可以查询记录并修改其属性,然后调用db.session.commit()方法将更改保存到数据库中。
以下代码演示了如何更新数据库中的记录:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Define the model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
# Retrieve a user and update their email address
user = db.session.query(User).filter_by(username='John Doe').first()
user.email = 'johndoe@example.org'
db.session.commit()
3.4.4 删除
要从数据库中删除记录,可以在query()方法中传递模型类,然后使用delete()方法删除指定的记录,最后调用db.session.commit()保存更改。
以下代码演示了如何从数据库中删除记录:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
# Define the model
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __repr__(self):
return '<User %r>' % self.username
# Delete a user
user = db.session.query(User).filter_by(username='John Doe').first()
db.session.delete(user)
db.session.commit()
4. 总结
本文阐述了如何使用Flask-SQLAlchemy进行数据库操作,包括如何:配置数据库连接、定义模型、创建数据库表、进行CRUD操作。 使用Flask-SQLAlchemy是连接Flask和SQLAlchemy的最佳方式之一。