flask ORM(对象关系映射): Flask-SQLAlchemy 单表(增删改查)

在Flask-web中使用原生的SQL语句操作数据库可能会枯燥乏味,因为它本身也是很长的一段代码,这无形中增加了我们的代码量。

所以在Flask中为我们提供了一个数据包叫做Flask-SQLAlchemy它为开发人员提供了很强的灵活性,因为它集成了SQL的全部功能。可能一个多表查询语言原生SQL要写20个甚至30个字符,它10个就搞定了。

ORM:对象关系映射用简单的话来讲就是通过创建类的方式来创建表,我们开发人员用它规定的语法来创建表,它就会生成复杂的SQL语句

接下来我们用SQLAlchemy来创建一个User用户表

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


class Config:
    SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1:3306/csdn'  # 数据库连接地址
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 取消动态最终


app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), nullable=False)
    age = db.Column(db.Integer, nullable=False)
    phone_num = db.Column(db.Integer, nullable=False)


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


if __name__ == '__main__':
    db.create_all()
    app.run()

我们可以看到首先是导入数据包,再之后我会创建一个Config的类,它里面都是存放一些配置信息,这其中的两个配置信息是导入SQLAlchemy必须要的,不然会有警告提醒。

SQLALCHEMY_DATABASE_URI 这是指定数据库的位置和表的位置

连接数据库://用户名:密码@主机地址:端口号/数据库名

这是一个连接的格式,我用的mysql所以连接的是msyql

 SQLALCHEMY_TRACK_MODIFICATIONS 这是是否开启动态追踪的意思,我们一般都是把他写为False

 下面的User就是用对象创建一个表,首先这个表就要继承db.Model,表明这不是一个普通的类,

 里面就是表的字段名和字段的类型。

 像这里我定义了一个字段叫id、类型是Integer、primary_key是否设为主键、autoincrement是否     自增,这就是我设置第一个id字段。

这其中字段还有很多类型如:String,Text,Float,Boolean

最后在run之前 db.create_all() 创建所有的表,创建表就完成了。

下面是我在表里创建几个人的信息,我们来操作一下它

一、查询 

 比如有一个要求,我要查询王老五的id值,我只知道他叫王老五。

    res = User.query.filter_by(name='王老五').first().id
    print(res)

这就是一个查询语言,首先我要找User表里面的王老五,所以先写一个User,再是query查询,然后用filter_by过滤指定名字是王老五,再然后first生成一个对象,最后点它的id就拿到了王老五的id

所以把查询语言分解一下 ,如下就是查询语言的分解结构

模型类名.query.过滤器.查询执⾏行行器器

 二、增加

又来了一个要求,我要增加一个人,她叫王小美,18岁,手机号991。

    # 第一个方法
    new = User()
    new.name = '王小美'
    new.age = 18
    new.phone_num = 99
    db.session.add(new)
    db.session.commit()
    new = User(name='王小美', age=18, phone_num=991)
    db.session.add(new)
    db.session.commit()

一共有两种添加方式,第一个是先实例化,再用点属性的方式赋值,再添加最后提交。

第二是实例化时就给他传了参数。这两种方法都可以不过最后都要先添加再提交上去才有数据。

三、修改

比如我要把王老五的手机号修改成520

    res = User.query.filter_by(name='王老五').first()
    res.phone_num = 520
    db.session.commit()

我们还是要首先把王老五找到,生成个对象,在用点属性的方式把他的手机号修改了

 

四、删除 

最后我们把王小美这个人删除了,就把王小美这个人的所有有关数据都删除了

    res = User.query.filter_by(name='王小美').first()
    db.session.delete(res)
    db.session.commit()

和修改差不多都要先找到王小美这个人再生成一个对象,再用delete这个方法把这个对象删除

 这就是关于单表操作的增删改查,欢迎转载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿汤哥798

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值