设为首页 加入收藏

TOP

flask操作数据库(一)
2023-07-25 21:27:16 】 浏览:59
Tags:flask

flask操作数据库

准备工作

  1. 安装flask-script(版本过高可能会报错)
pip install flask-script==2.0.3

使用flask-script里的Manager类实例化来管理项目的启动等

from apps import create_app
from flask_script import Manager

app = create_app()

manager = Manager(app=app)

if __name__ == '__main__':
    # 运行app模块
    manager.run()

在启动项目时由原来的python app.py 改成了python app.py runserver

  1. 安装pymysql
pip install pymysql
  1. 安装flask-sqlalchemy
pip install flask-sqlalchemy
  1. 安装flask-migrate,版本过高可能出现问题
pip install flask-migrate==2.7.0

配置数据库

  1. 在settings里配置一下数据库连接路径
class DevelopmentConfig:
    ENV = 'development' # 设置环境为开发环境
    DEBUG = True  # 设置debug为true
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@127.0.0.1:3306/flaskday05'#访问的数据库+用的驱动://数据库的用户名:密码@服务器地址:端口号/数据库
    # 设置sqlalchemy不自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS=False
    SQLALCHEMY_ECHO=True#调试模式
  1. 在项目文件下新建一个ext包,在包的init文件内建立映射对象
# 创建一个映射对象
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
  1. 创建完之后,需要将映射对象与app进行关联,在apps包的init文件内进行关联
    # 将db(orm映射)对象和app进行关联
    db.init_app(app)
  1. flask-migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作。
#在app.py文件中,当创建完app对象之后
from flask_migrate import Migrate, MigrateCommand
migrate=Migrate(app=app,db=db)#建立app影响数据库的映射
manager.add_command('db',MigrateCommand)#将命令交给manager管理
  1. 在各蓝图中创建模型(类)时,要用到db的model
#在model.py文件中
from exts import db
class User(db.Model):
  1. 模型的基础创建格式和字段类型

image

  1. 将创建好的模型(自定义的类)导入到app.py文件中
from apps.user.models import User
  1. 使用terminal运行flask项目
初始化(一个项目只需要初始化一次,用来生成migrations文件夹)python app.py db init
更新版本(每次修改后要运行,用来在versions文件中生成最新的版本py文件)python app.py db migrate
数据库同步(每次修改要运行,用来将最新版本的内容更新到数据库上)python app.py db upgrade
删除时:python app.py db downgrate 降级并删除版本文件

往数据库插入数据

每次插入单挑数据

image

一次性插入多条数据

    # 一次性插入多条数据
    user1 = User(name='wang',email='wang@163.com',pswd='123456',role_id=role1.id)
    user2 = User(name='zhang',email='zhang@189.com',pswd='201512',role_id=role2.id)
    user3 = User(name='chen',email='chen@126.com',pswd='987654',role_id=role2.id)
    user4 = User(name='zhou',email='zhou@163.com',pswd='456789',role_id=role1.id)
    db.session.add_all([user1,user2,user3,user4])
    db.session.commit()

查询数据库

  1. filter模糊查询,返回名字结尾字符为g的所有数据。
User.query.filter(User.name.endswith('g')).all()

查询结果为:列表里套着对象
[<User 1>, <User 2>]
  1. 查询:filter_by精确查询
返回名字等于wang的所有user
User.query.filter_by(name='wang').all()

后面加.first()返回查询到的第一个对象
all()返回查询到的所有对象
  1. get(),参数为主键,如果主键不存在没有返回内容
User.query.get(2)
  1. 逻辑非,返回名字不等于wang的所有数据
User.query.filter(User.name!='wang').all()
  1. 逻辑或,需要导入or_
from sqlalchemy import or_
User.query.filter(or_(User.name!='wang',User.email.endswith('163.com'))).all()
  1. 逻辑与,需要导入and,返回and()条件满足的所有数据
from sqlalchemy import and_
User.query.filter(and_(User.name!='wang',User.email.endswith('163.com'))).all()
  1. not_ 相当于取反
from sqlalchemy import not_
User.query.filter(not_(User.name=='chen')).all()
  1. 其他

image

  1. 排序order_by

image

  1. limit限制

image

删除数据

user = User.query.first()
db.session.delete(user)
db.session.commit()

更新数据

user = User.query.first()
user.name = 'dong'
db.session.commit()

模型表直接的关联

  1. 一对多
class Role(db.Model):
    ...
    #关键代码
    user = db.relationship('User', backref='role', lazy='dynamic')
    ...

class Use
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python爬虫实战,requests+openpy.. 下一篇10个优秀的Python库,实用且有趣

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目