当我们需要在Flask应用中使用关系型数据库,SQLAlchemy是一款功能强大,易于使用的Python ORM框架。在此,我将介绍如何在Flask应用中使用SQLAlchemy实现持久化数据。
步骤1:安装依赖
在开始前,我们需要安装依赖。在终端中执行以下命令安装依赖:
pip install flask sqlalchemy
步骤2:创建Flask应用
我们首先需要编写一个Flask应用。在Flask应用中,我们需要通过调用SQLAlchemy的API实现对数据库的访问。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
步骤3:配置SQLAlchemy
接下来,我们需要配置SQLAlchemy。在Flask应用中,我们可以通过设置SQLALCHEMY_DATABASE_URI环境变量来指定关系型数据库的连接。我们还需要指定SQLAlchemy的Track_Mods选项为False,以避免出现警告信息。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
步骤4:创建数据模型
我们需要通过创建数据模型来定义关系型数据库的表结构。在SQLAlchemy中,我们可以通过继承SQLAlchemy.Model类来定义数据模型。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
上述代码中,我们定义了一个User类,该类继承了SQLAlchemy.Model类,拥有id、username、email属性,其中id为主键,username不允许为空且必须唯一。
步骤5:初始化数据库
我们需要通过调用SQLAlchemy的API来创建关系型数据库的表结构。我们可以通过调用db.create_all()方法来创建表结构。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
示例1:增删改查操作
现在我们已经定义了数据模型和初始化了数据库,可以对数据进行增删改查操作。我们以User类为例。
添加操作
可以通过实例化User类并将其写入数据库,然后通过commit()方法将更改保存到数据库。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
user1 = User(username='admin', email='admin@example.com')
db.session.add(user1)
db.session.commit()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
查询操作
可以通过调用db.session.query(User).all()方法来获取所有User类的实例。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
users = db.session.query(User).all()
for user in users:
print(user.username)
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
修改操作
可以通过获取User实例并更改其属性值,然后通过commit()方法将更改保存到数据库。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
user = db.session.query(User).filter_by(username='admin').first()
user.email = 'new_admin@example.com'
db.session.commit()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
删除操作
可以通过获取User实例并调用db.session.delete()方法将其从数据库中删除,然后通过commit()方法将更改保存到数据库。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
user = db.session.query(User).filter_by(username='admin').first()
db.session.delete(user)
db.session.commit()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
示例2:使用Flask-migrate进行数据库迁移
在Flask应用的开发过程中,我们可能需要对数据库进行迁移。在这个过程中,我们需要修改关系型数据库的表结构。Flask-migrate是一个简单的库,它可以使我们更方便地进行数据库迁移。
步骤1:安装依赖
在开始前,我们需要安装依赖。在终端中执行以下命令安装依赖:
pip install flask-migrate
步骤2:创建Flask应用
同样,我们首先需要编写一个Flask应用。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
migrate = Migrate(app, db)
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), nullable=False)
def __repr__(self):
return '<User %r>' % self.username
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run()
步骤3:创建迁移脚本
我们需要通过调用flask db init命令来初始化迁移目录。然后,我们可以通过调用flask db migrate命令来创建迁移脚本。最后,我们可以通过调用flask db upgrade命令来升级关系型数据库。
flask db init
flask db migrate -m "create users table"
flask db upgrade
步骤4:修改数据模型
假设我们需要添加一个age属性到User类,来表示该用户的年龄。我们可以通过在User类中添加一个age属性来修改数据模型。
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), nullable=False)
age = db.Column(db.Integer)
def __repr__(self):
return '<User %r>' % self.username
步骤5:创建新的迁移脚本和升级关系型数据库
我们可以通过调用flask db migrate命令来创建新的迁移脚本,然后通过调用flask db upgrade命令来升级关系型数据库。
flask db migrate -m "add age column to users table"
flask db upgrade
到此为止,我们就完成了使用SQLAlchemy实现Flask应用中持久化数据的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask使用SQLAlchemy实现持久化数据 - Python技术站