Flask使用SQLAlchemy实现持久化数据

当我们需要在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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Flask模板引擎之Jinja2语法介绍

    Flask模板引擎之Jinja2语法介绍 在Flask中,Jinja2是为构建动态web应用程序提供的一个模板引擎,可以轻松地将应用程序与HTML(或其他文本)集成,并在呈现页面之前修改动态内容。 变量 在Jinja2中,使用双大括号来包含变量名,如 {{ variable_name }}。 <!DOCTYPE html> <html&gt…

    Flask 2023年5月15日
    00
  • 关于使用Python的time库制作进度条程序

    制作进度条程序是常见的需求,Python的time库提供了一种比较简单的方法来实现这个功能。 首先,我们需要导入time库。 import time 然后,在程序中设置进度条的总长度和每次更新进度条的长度。 total_length = 100 step_length = 1 接着,我们可以使用for循环来模拟进度条的进度。 for i in range(t…

    Flask 2023年5月16日
    00
  • python项目打包成exe和安装包的方法步骤

    当你完成了一个Python项目,你可能会想将其转化为一个可执行文件(Executable)或者安装包文件(Installer)来进行分发,本文将详细介绍如何将Python项目打包为exe或者安装包。下面是两条示例步骤。 一、将Python项目打包为exe 步骤1:安装 PyInstaller 打包 Python 项目需要用到一个第三方库 PyInstalle…

    Flask 2023年5月16日
    00
  • flask的orm框架SQLAlchemy查询实现解析

    下面我会详细讲解如何使用flask中的ORM框架SQLAlchemy进行查询,并附上两个示例。 一、什么是ORM框架? ORM (Object-Relational Mapping) 是对象关系映射的缩写,是指通过将数据库中的关系数据转换为对象模型,将程序中的对象模型通过映射转换成关系数据。本质上,ORM框架是一种工具,用于连接Python对象和数据库表之间…

    Flask 2023年5月15日
    00
  • Flask利用自定义接口实现mock应用详解

    我来为您详细讲解 “Flask利用自定义接口实现mock应用详解” 的完整攻略。 什么是mock应用? Mock应用指的是模拟应用程序数据交互的一种应用方式,旨在加速应用程序开发和测试过程中的迭代。mock应用可以用于测试,在应用的开发周期中,可以在许多条件下进行测试,以发现系统实现的潜在问题。Mock应用程序通常不会进行实际数据交互,而是模拟服务器或本地数…

    Flask 2023年5月15日
    00
  • python miniWeb框架搭建过程详解

    当我们要搭建自己的网站,动态web框架是不可或缺的。Python是一种非常流行的编程语言,它拥有丰富的web框架,比如Flask、Django等。而如果我们想要更深入了解web框架的原理,也可以尝试手动搭建一个miniWeb框架。下面,我们将分为以下几个步骤,详细讲解Python miniWeb框架的搭建过程: 搭建服务器 首先,我们需要一个能够运行Pyth…

    Flask 2023年5月16日
    00
  • Python flask路由间传递变量实例详解

    下面我来详细讲解一下“Python flask路由间传递变量实例详解”的完整攻略。 一、什么是 Flask 路由 路由是 Web 应用程序中的一个术语,用于指定应用程序如何响应对特定端点的客户机请求。在 Flask 中,路由是与 URL 绑定的响应函数。 下面是一个定义路由的基本语法: @app.route(‘/path/’) def function_na…

    Flask 2023年5月15日
    00
  • python2.7的flask框架之引用js&css等静态文件的实现方法

    下面是详细讲解“Python2.7的Flask框架之引用JS&CSS等静态文件的实现方法”的攻略: 一、Flask框架静态文件目录 在Flask应用中,静态资源文件一般保存在应用程序的 static 文件夹中。因为 Flask 框架在启动时会将 static 文件夹中的内容提供给外部访问。 一般情况下,静态资源文件可分为如下两类: CSS:层叠样式表…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部