前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python + Flask ORM实现增删改查

Python + Flask ORM实现增删改查

作者头像
Wu_Candy
发布2022-07-05 14:13:07
9690
发布2022-07-05 14:13:07
举报
文章被收录于专栏:无量测试之道
1. 背景介绍

SQLAlchemy 以 ORM 为核心基础提供可选对象关系映射能力。

(1). ORM 提供一个附加的配置层,允许用户自定义的 Python 类进行对象关系映射,通过 session 会话与数据库进行交互。

(2). ORM 扩展了核心级别的 SQL 表达式语言,允许按照用户定义的对象组合和调用 SQL 查询。

(3). Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展。

(4). 常见情况下对于只有一个 Flask 应用,所有您需要做的事情就是创建 Flask 应用。

(5). 选择加载配置接着创建 SQLAlchemy 对象时候把 Flask 应用传递给它作为参数。

2. 注意事项

连接 mysql 的 client 如果没有安装成功,需要手动来安装对应 python 版本的 mysqlclient.***.whl 文件。

3. 安装依赖

使用 pip 安装以下依赖模块

代码语言:javascript
复制
python -m pip install flask==1.1.2
python -m pip install flask_migrate==2.7.0
python -m pip install flask_sqlalchemy
python -m pip install flask_script
4. 实战代码

今天的分享将通过简单的增删改查来演示 ORM 的效果。

代码如下:

代码语言:javascript
复制
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import MigrateCommand
from flask_migrate import Migrate
from flask_script import Manager,Server

#实例化一个Flask 对象
app = Flask(__name__)

#设置连接数据库的配置,这是以mysql db 为示例来讲解
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:test@127.0.0.1:3306/dbtest1"

#如果设置为True,将跟踪对象的修改并发出信号,默认设置为None
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False

#查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO']=True

#这个对象就包含 sqlalchemy 和 sqlalchemy.orm 中的所有函数和助手
db = SQLAlchemy(app)


manager = Manager(app)
Migrate(app,db)
#创建数据库映射命令
manager.add_command('db',MigrateCommand)

#创建启动命令
manager.add_command('start',Server(port=8000,use_debugger=True))



class Role(db.Model):#提供一个名为 Model 的类,用于作为声明模型时的 delarative 基类
    __tablename__ = 'roles' #给表起名
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True)
    us = db.relationship("User",backref="role")
    icon = db.Column(db.String(40),default='default.jpg')
    def __repr__(self):#用于显示一个可读字符串
        return "Role:%s" %self.name

class User(db.Model):
    __tablename__ = 'users' #给表起名
    id=db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(64),unique=True,index=True)
    email = db.Column(db.String(64),unique=True)
    pswd = db.Column(db.String(64))
    role_id=db.Column(db.Integer,db.ForeignKey('roles.id'))

    def __repr__(self):
        return "User:%s"% self.name


if __name__ == '__main__':
    # db.drop_all() # db 对象调用 SQLAlchemy.drop_all() 方法来删除表:
    # db.create_all() # db 对象调用 SQLAlchemy.create_all() 方法来创建表:
    # manager.run()

    #创建
    role1=Role(name="admin")
    role2=Role(name="test")
    db.session.add(role1)
    db.session.commit()
    db.session.add(role2)
    db.session.commit() #必须提交会话,但是没有必要在每个请求后删除它(session),Flask-SQLAlchemy 会帮您完成删除操作

    user1=User(name="wang",email="test1@126.com",pswd="1234",role_id=role1.id)
    user2=User(name="test",email="test2@126.com",pswd="1234",role_id=role2.id)
    db.session.add_all([user1,user2])
    db.session.commit()

    #查询
    user1=User.query.filter_by(name="wang")
    roles=Role.query.all()
    for role in roles:
        print(role.name,role.id)

    #删除
    user=User.query.first()
    db.session.delete(user)
    db.session.commit()
    print(User.query.all())
    print("*")
    print(user)

    #更新
    user=User.query.first()
    user.name="test"
    db.session.commit()
    print(User.query.first())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 背景介绍
  • 2. 注意事项
  • 3. 安装依赖
  • 4. 实战代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档