【首发】3天掌握Flask开发项目系列博客之二,操作数据库

梦想橡皮擦 发表于 2022/02/25 15:58:24 2022/02/25
【摘要】 flask 操作数据库,写入一条数据当 flask 基本环境运行起来之后,就要考虑数据入库相关内容了,本篇博客会将 flask 与 mysql 实现对接,完成一个入库操作。首先依旧是安装模块,flask 就是这点比较好,可扩展性特别强。pip install flask-sqlalchemy pymysql其中 flask-sqlalchemy 是一套ORM框架,在它的帮助下,可以让我们像...

flask 操作数据库,写入一条数据

当 flask 基本环境运行起来之后,就要考虑数据入库相关内容了,本篇博客会将 flask 与 mysql 实现对接,完成一个入库操作。
首先依旧是安装模块,flask 就是这点比较好,可扩展性特别强。

pip install flask-sqlalchemy pymysql

其中 flask-sqlalchemy 是一套ORM框架,在它的帮助下,可以让我们像操作数据对象一样操作数据库表数据。

除了这些以外,你还要在电脑上安装 MySQL 数据库,最好在安装一个 navcat 用于操作它。

测试一把数据库链接吧

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql

pymysql.install_as_MySQLdb() # 参照 mysqldb 模块使用
app = Flask(__name__)

class Config(object):
    # 设置连接数据库的URL
    user = 'root'
    password = 'root'
    database = 'xiangpica'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://%s:%s@127.0.0.1:3306/%s' % (user, password, database)

    # 设置sqlalchemy自动跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 显示原始SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    # 禁止自动提交数据处理
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = False

# 读取配置
app.config.from_object(Config)

# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)

class User(db.Model):
    # 定义表名
    __tablename__ = 'users'
    # 定义字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(64), unique=True)

if __name__ == '__main__':
    # 创建所有表
    db.create_all()

上述代码核心完成的就是 flask 创建 users 表的操作,其中重要步骤已经添加了注释,在临摹代码的时候,重点注意 app.config.from_object(Config) 读取配置操作以及实例化 db = SQLAlchemy(app) ,即 db对象 的操作。

使用 navcat 等数据库连接工具,可以查询表结构和表数据。

其中关于 db 的属性和方法,这部分内容资料非常多,稍微查一下即可掌握

class User(db.Model): # 继承 db.Model
    # 定义表名
    __tablename__ = 'users'  
    # 定义字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True) # db.Column 字段名称设定
    name = db.Column(db.String(64), unique=True)  

在创建好的数据表中插入数据,只需要执行下述代码即可。

if __name__ == '__main__':
    # 创建所有表
    # db.create_all()
    # 添加数据
    user = User(name="admin")

    db.session.add_all([user])
    db.session.commit() # 提交数据

查询某个表中的所有数据

users = User.query.all()
print(users)
# 输出 [<User 1>, <User 2>]

查询指定ID的数据

user1 = User.query.get(1)
print(user1)
# 输出 <User 1>

筛选指定数据

User.query.filter(User.name == 'wwww').first()
# 输出 <User 2>

删除与修改都是查询到数据,然后做更正提交

user1 = User.query.filter(User.name == 'wwww').first()
print(user1)

# 更新
user1.name = '橡皮擦'
db.session.commit()
# 删除
user1 = User.query.filter(User.name == '橡皮擦').first()
print(user1)

# user1.name = '橡皮擦'
db.session.delete(user1)
db.session.commit()

备注一份常用的数据查询过滤器,以下函数都会返回一个新的查询对象

  • filter():追加过滤器;
  • filter_by():追加等值过滤器;
  • limit():返回指定数量的结果;
  • offset(): 偏移原查询返回的结果;
  • order_by():对查询对象结果进行排序;
  • group_by():对查询对象进行分组。

SQLAlchemy查询执行器:

  • all():列表格式所有结果;
  • first(): 返回查询的第1个结果,无数据返回None;
  • first_or_404(): 返回查询的第1个结果,无数据返回404;
  • get(): 返回指定主键对应的行,无数据返回None;
  • get_or_404():返回指定主键对应的行,无数据返回404;
  • count(): 返回查询结果的个数;
  • paginate():返回包含指定范围内的结果Paginate对象。

除此之外,还需要掌握过滤器中的筛选条件,例如 _and_or()_not() 等内容。

记录时间

2022年度 Flag,写作的 573 / 1024 篇。
可以关注我,点赞我、评论我、收藏我啦。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请发送邮件至:cloudbbs@huaweicloud.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。