千家信息网

flask学习之数据库操作一

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,数据库操作使用sqlalchemy模块安装(需安装MySQL-python/python-devel)pip install flask-sqlalchemy目录结构├── app│ ├── __
千家信息网最后更新 2025年02月04日flask学习之数据库操作一

数据库操作使用

sqlalchemy模块安装(需安装MySQL-python/python-devel)pip install flask-sqlalchemy


目录结构

├── app│   ├── __init__.py│   └── models.py├── config.py


配置环境

vim config.py#coding:utf-8SQLALCHEMY_DATABASE_URI = 'mysql://mysqlTest:mysqlTest@192.168.3.85/mysqlTest'SQLALCHEMY_TRACK_MODIFICATIONS = True    #python版本低报出警告
#初始化vim app/__init__.pyfrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)app.config.from_object('config')db = SQLAlchemy(app)from app import models
#定义表模型(举例用)vim app/models.pyfrom app import dbclass User(db.Model):        id = db.Column(db.Integer,primary_key = True)        nickname = db.Column(db.String(64),index=True,unique = True)        email = db.Column(db.String(120),index=True,unique = True)        def __repr__(self):                return '' % (self.nickname)


shell模式下使用介绍

#创建数据模型/删除数据模型>>> from app import db>>> from app.models import User    #导入User模型>>> db.create_all()            #创建数据库模型>>> db.drop_all()>>> db.create_all()
#添加数据#单条数据的提交方式>>> name_admin = User(nickname='admin',email='admin@flask.com') #赋值数据   >>> db.session.add(name_admin)    #添加数据>>> db.session.commit()    #提交数据#多条数据的提交方式>>> name_user1 = User(nickname='user1',email='user1@flask.com')>>> name_user2 = User(nickname='user2',email='user2@flask.com')>>> db.session.add_all([name_user1,name_user2])    #提交的是一个列表>>> db.session.commit()
mysql> select * from user;+----+----------+-----------------+| id | nickname | email           |+----+----------+-----------------+|  1 | admin    | admin@flask.com ||  2 | user1    | user1@flask.com ||  3 | user2    | user2@flask.com |+----+----------+-----------------+


查询数据

#查询所有数据all=User.query.all()#过滤查询(filter_by()),查询nickname=user1的行>>> user1 = User.query.filter_by(id=2).first() >>> user2 = User.query.filter_by(id=3).first()>>> user1>>> user2#查询该行数据的各个字段,查看nickname字段的值>>> user1.nicknameu'user1'>>> user2.nicknameu'user2'#结果显示限制(limit()),显示两条查询结果>>> result = User.query.limit(2).all()>>> result[, ]

修改数据

#修改数据,修改对应字段的值后直接提交即可#修改use1的nickname字段的值为user001user1.nickname = 'user001'db.session.add(user1)db.session.commit()
删除数据db.session.delete(user1)db.session.commit()


#常见查询过滤器filter() 把过滤器添加到原查询上,返回一个新查询filter_by() 把等值过滤器添加到原查询上,返回一个新查询limit() 使用指定的值限制原查询返回的结果数量,返回一个新查询offset() 偏移原查询返回的结果,返回一个新查询order_by() 根据指定条件对原查询结果进行排序,返回一个新查询group_by() 根据指定条件对原查询结果进行分组,返回一个新查询
#常见查询执行函数all() 以列表形式返回查询的所有结果first() 返回查询的第一个结果,如果没有结果,则返回 Nonefirst_or_404() 返回查询的第一个结果,如果没有结果,则终止请求,返回 404 错误响应get() 返回指定主键对应的行,如果没有对应的行,则返回 Noneget_or_404() 返回指定主键对应的行,如果没找到指定的主键,则终止请求,返回 404 错误响应count() 返回查询结果的数量paginate() 返回一个 Paginate 对象,它包含指定范围内的结果


0