Flask-数据库-SQLAlchemy

这篇具有很好参考价值的文章主要介绍了Flask-数据库-SQLAlchemy。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SQLAlchemy是flask的扩展,是一个功能强大的OR映射器,支持多种数据库后台,可以将类的对象映射至数据库表。

使用这个工具,可以创建数据库,创建表,并为数据库添加数据,进行查询操作等。

参考:Flask SQLAlchemy - Flask 教程 | BootWiki.com

创建实例 

 app=Flask(__name__)  #创建Flask实例

 app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///students.sqlite3'#设置数据库URL

app.config[]可以为Flask实例添加一些配置。

这个配置指明当前文件夹下students.sqlite3数据库文件作为数据库访问的URL,这个数据库文件当前可以不存在,在程序运行时create。

在Flask-SQLAlchemy中,数据库使用URL指定。几种最流行的数据库引擎使用的URL格式

Flask-数据库-SQLAlchemy 

 

app.config['SECRET_KEY'] = "random string"

 这个配置设置了secret_key,用于session,在学习session的时候已经知道,服务器加密会话数据时需要一个secret_key,至于这里为什么要用到session,在后面会说到。

db=SQLAlchemy(app) 创建一个SQLAlchemy类的对象。 该对象包含ORM操作的辅助函数。 它还提供了一个使用其声明用户定义模型的父级模型类。

类和模型 

模型这个术语表示应用使用的持久化实体。在ORM中,模型一般是一个Python类,类中的属性对应于数据库表中的列。

定义一个类(students模型),继承Model模型。这个类和数据库的表对应,类的属性分别对应表的字段。

class students(db.Model):
    id = db.Column('student_id', db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    city = db.Column(db.String(50))
    addr = db.Column(db.String(200))
    pin = db.Column(db.String(10))
    def __init__(self,name,city,addr,pin):


        self.name=name
        self.city=city
        self.addr=addr
        self.pin=pin

db.Column类构造函数的第一个参数是数据库列和模型属性的类型 

常用的类型

Flask-数据库-SQLAlchemy 

db.Column的其余参数指定属性的配置选项

常用的SQLAlchemy配置选项Flask-数据库-SQLAlchemy 

 

通过属性定义,也为表添加了字段。id为主键。

db.create_all()

使用这个语句,执行创建数据库操作。

CRUD操作 

 SQLAlchemy的Session对象管理ORM对象的所有持久性操作。

db.session.add(模型对象) - 将一条记录插入到映射表中   准备把对象写入数据库之前,要先将其添加到会话中
db.session.delete(模型对象) - 从表中删除记录
模型.query.all() - 从表中检索所有记录(对应于SELECT查询)。

db.session.commit()提交修改  为了把对象写入数据库,我们要调用commit()方法提交会话

可以使用filter属性将筛选器应用于检索到的记录集。例如,要在students表中检索city ='Haikou'的记录,请使用以下语句 

Students.query.filter_by(city = 'Haikou').all()

Flask-数据库-SQLAlchemy 

Flask-数据库-SQLAlchemy 

 

 

数据库会话db.session和Flask的session对象没有关系。数据库会话也称为事务, 能保证数据库的一致性。提交操作使用原子方式把会话中的对象全部写入数据库。如果在写入会话的过程中发生了错误,那么整个会话都会失效。如果你始终把相关改动放在会话中提交,就能避免因部分更新导致的数据库不一致。

实战

实现一个添加学生信息并展示信息的小应用。

点击添加学生,打开添加学生页面,提交信息后,展示所有学生信息列表。

http://localhost:5000/

Flask-数据库-SQLAlchemy

http://localhost:5000/new

 Flask-数据库-SQLAlchemy

http://localhost:5000/ 

Flask-数据库-SQLAlchemy

这个应用,一共有两个页面,一个展示所有信息show_all.html,一个添加学生信息new.html。

在展示所有信息页面,首先显示闪现消息flash,当没有闪现消息的时候不显示。添加学生链接至new页面,最下方读取数据库数据并显示,数据库无数据时不显示数据。

show_all.html如下

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask示例</title>
</head>
   <body>

      <h1>
         Flask
            SQLAlchemy示例
      </h1>

      <hr/>
      {%- for message in get_flashed_messages() %}
         {{ message }}
      {%- endfor %}

      <h1>(<a href = "{{ url_for('new') }}">添加学生
         </a>)</h1>

      <table>
         <thead>
            <tr>
               <th>姓名</th>
               <th>城市</th>
               <th>地址</th>
               <th>Pin</th>
            </tr>
         </thead>

         <tbody>
            {% for student in students %}
               <tr>
                  <td>{{ student.name }}</td>
                  <td>{{ student.city }}</td>
                  <td>{{ student.addr }}</td>
                  <td>{{ student.pin }}</td>
               </tr>
            {% endfor %}
         </tbody>
      </table>

   </body>
</html>


对于的视图函数如下

@app.route('/')
def show_all():
    return render_template('show_all.html',students=students.query.all())

添加学生信息页面new.html,也会显示flash,下放展示一个表单,点击提交按钮后,表单数据以post方式提交给服务器,并使用视图函数new接收表单数据进行处理。对表单数据进行校验,不满足校验显示flash,满足校验,则向数据库添加数据,并重定向至展示信息页面。

new.html页面如下:


<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Flask示例</title>
</head>

    <h3>添加学生信息</h3>
      <hr/>

      {%- for category, message in get_flashed_messages(with_categories = true) %}
         <div class = "alert alert-danger">
            {{ message }}
         </div>
      {%- endfor %}

      <form action = "/new" method = "post">
         <label for = "name">姓名</label><br>
         <input type = "text" name = "name" placeholder = "Name" /><br>
         <label for = "email">城市</label><br>
         <input type = "text" name = "city" placeholder = "city" /><br>
         <label for = "addr">地址</label><br>
          <textarea name = "addr" placeholder = "addr"></textarea><br>
         <label for = "PIN">邮编</label><br>
         <input type = "text" name = "pin" placeholder = "pin" /><br>
         <input type = "submit" value = "提交" />
      </form>

   </body>
</html>



 对于视图函数如下

@app.route('/new',methods=['GET','POST'])
def new():

    if request.method=='POST':
        if not request.form['name']or not request.form['city']or not request.form['addr']:
            flash('Please enter all the fields','error') #如果有一个没填写,闪现消息
        else:
            student = students(request.form['name'], request.form['city'], request.form['addr'], request.form['pin'])
            print(student)
            db.session.add(student)#把数据添加到数据库
            db.session.commit()#提交数据
            flash('Record was successfully added')#闪现消息添加成功
            return  redirect(url_for('show_all')) #一个函数可以有两个return
    return render_template('new.html') #点击添加按钮,渲染new.html页面

最后附上程序入口,运行程序,即可访问。

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

完整代码:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask,render_template,request,flash,redirect,url_for
app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///students.sqlite3'#设置数据库URL
#创建一个SQLAlchemy类的对象。 该对象包含ORM操作的辅助函数。 它还提供了一个使用其声明用户定义模型的父级模型类。
app.config['SECRET_KEY'] = "random string"




db=SQLAlchemy(app)
class students(db.Model):
    id = db.Column('student_id', db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    city = db.Column(db.String(50))
    addr = db.Column(db.String(200))
    pin = db.Column(db.String(10))
    def __init__(self,name,city,addr,pin):


        self.name=name
        self.city=city
        self.addr=addr
        self.pin=pin



@app.route('/')
def show_all():
    db.create_all()
    return render_template('show_all.html',students=students.query.all())


@app.route('/new',methods=['GET','POST'])
def new():

    if request.method=='POST':
        if not request.form['name']or not request.form['city']or not request.form['addr']:
            flash('Please enter all the fields','error') #如果有一个没填写,闪现消息
        else:
            student = students(request.form['name'], request.form['city'], request.form['addr'], request.form['pin'])
            print(student)
            db.session.add(student)#把数据添加到数据库
            db.session.commit()#提交数据
            flash('Record was successfully added')#闪现消息添加成功
            return  redirect(url_for('show_all')) #一个函数可以有两个return
    return render_template('new.html') #点击添加按钮,渲染new.html页面

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

 总结:文本学习了Flask数据库相关扩展SQLAlchemy的使用,并实现了一个添加并展示学生信息的应用。


 文章来源地址https://www.toymoban.com/news/detail-408070.html

到了这里,关于Flask-数据库-SQLAlchemy的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flask-sqlalchemy更新数据库

    Flask开发过程中,难免不会在开发工程中修改数据库信息,如添加字段,修改字段类型等,Flask可以通过扩展库flask-migrate来更新DEBUG中的工程数据库,更新数据库步骤如下: 1、首先需要安装flask_migrate,pip install flask_migrate 2、因为flask_sqlalchemy是通过终端命令更新,所以需要f

    2023年04月08日
    浏览(29)
  • 大白话说Python+Flask入门(六)Flask SQLAlchemy操作mysql数据库

    这篇文章被搁置真的太久了,不知不觉拖到了周三了,当然,也算跟falsk系列说再见的时候,真没什么好神秘的,就是个数据库操作,就大家都知道的 CRUD 吧。 1、Flask SQLAlchemy简介 Flask SQLAlchemy 是基于 Flask web 框架和 SQLAlchemy ORM (对象关系映射)的工具。它旨在为 Flask web 应用

    2024年02月05日
    浏览(49)
  • 如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

    首先,我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它,就像这样: 好了,现在我们已经有了一个可以操作数据库的工具,接下来让我们来看看如何使用它吧! 首先,我们需要创建一个Flask应用对象,并配置数据库的连接字符串和师: 现在,我们已经创建了一个数据库,

    2024年02月15日
    浏览(37)
  • 【python】flask操作数据库工具SQLAlchemy,详细用法和应用实战

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,

    2024年04月17日
    浏览(35)
  • python:使用Flask-SQLAlchemy对数据库增删改查的简单示例

    以下将介绍Flask-SQLAlchemy对数据库增删改查的简单示例。 一、安装所需的库 pip install flask flask-sqlalchemy flask-mysql 二、创建数据表 本示例使用mysql创建数据库和表 CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   `age` int(11) DEFAULT NULL,   PRIMARY KEY (`id

    2024年02月07日
    浏览(50)
  • python Flask项目使用SQLalchemy连接数据库时,出现RuntimeError:Working outside of application context.的解决过程记录

    在使用python的Flask框架跟着教程编写项目时,我跟着教程使用了三个文件来组织,分别是main.py(主程序),module.py(数据库模型),controller.py(蓝图模块程序,用Blueprint衔接) 在主程序中,创建app、SQLalchemy实例对象db并将二者绑定 在module.py中,导入主程序中的db和app,创建

    2024年02月09日
    浏览(36)
  • 【Flask 连接数据库,使用Flask-Migrate实现数据库迁移及问题汇总】

    Flask 连接数据库,使用Flask-Migrate实现数据库迁移 安装Flask-Migrate插件 使用Flask-Migrate步骤 app.py主要用于数据库连接 model.py 中导入了 db,作用是存储一个User类 ,用于生成表头。 manager.py用于数据迁移管理,运行后将生成一个文件夹。 Flask-Migrate运行 问题汇总 问题一:flask_mig

    2024年01月16日
    浏览(35)
  • flask笔记 02 | Flask数据库连接(sqlite、mysql)

    Flask没有指定使用的数据库,不像django提供了orm数据库抽象层,可以直接采用对象的方式操作数据库。但为了开发效率,在开发Flask项目中一般会选择 SQLALchemy 来操作数据库,类似django的ORM. SQLALchemy实际是对数据库的抽象,让开发者不直接使用sql语句进行开发,而是通过Pytho

    2024年01月25日
    浏览(41)
  • flask数据库操作

    本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高度的

    2024年02月14日
    浏览(28)
  • Flask连接数据库

    目录   导入相应包 创建接口 基于上述db对象创建一个Student 添加信息 显示学生信息 修改与删除信息   html页面 将表单的 action 直接指向当前路径,这就要求在当前路径所对应的函数中,对 POST 数据进行处理: html页面 添加路由 html页面如下 修改代码如下 删除代码如下    

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包