写点什么

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

作者:梦想橡皮擦
  • 2022 年 3 月 15 日
  • 本文字数:1688 字

    阅读完需:约 6 分钟

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

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


pip install flask-sqlalchemy pymysql
复制代码


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


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

测试一把数据库链接吧

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyimport 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() 等内容。


发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
3天掌握Flask开发项目系列博客之二,操作数据库_3月月更_梦想橡皮擦_InfoQ写作平台