Flask操作数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jeekmary/article/details/87857661

基本上只要是应用程序都会和数据库打交道,今天我来学习的是flask这个web开发框架怎么样和数据库完美的交互

1,首先我们来看一段数据库创建,和数据添加

# _*_ coding: utf-8
from flask import Flask
# 这个数是操作数据库的框架
from flask_sqlalchemy import SQLAlchemy
__author__ = 'hb'
__date__ = '2019/2/20 14:48'
app = Flask(__name__)


class Config(object):
    """配置参数"""
    # 配置sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI =  		    "mysql://root:[email protected]:3306/flaskmysql"
    # 设置sqlalchemy自动跟踪数据库,也就是有变化时自动变化
    SQLALCHEMY_TRACK_MODIFICATIONS = True


app.config.from_object(Config)
# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)


class Role(db.Model):
    __tablename__ = "tbl_roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    
    users = db.relationship("User", backref="Role")
    # 显示对象的时候更直观
    def __repr__(self):
        return "Role object name=%s"%self.name

class User(db.Model):
    """用户表"""
    """
    primary_key	如果设为 True,这列就是表的主键
    unique	如果设为 True,这列不允许出现重复的值
    index	如果设为 True,为这列创建索引,提升查询效率
    nullable	如果设为 True,这列允许使用空值;如果设为 False,这列不允许使用空值
    default	为这列定义默认值
    """
    __tablename__ ="tbl_users"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(128), unique=True)
    pswd =db.Column(db.String(128))
    # 这里很明显是外键,mysql外键不懂得同学可以去查下资料
    role_id = db.Column(db.Integer,db.ForeignKey("tbl_roles.id"))
    def __repr__(self):
        return "User object name=%s"%self.name
if __name__ == '__main__':
    # 清除数据库里面的所有的数据
    db.drop_all()

    # 创建所有的表
    db.create_all()
    ro1 = Role(name='admin')
    ro2 = Role(name='user')
    db.session.add_all([ro1, ro2])
    db.session.commit()
    us1 = User(name='wang', email='[email protected]', pswd='123456', role_id=ro1.id)
    us2 = User(name='zhang', email='[email protected]', pswd='201512', role_id=ro2.id)
    us3 = User(name='chen', email='[email protected]', pswd='987654', role_id=ro2.id)
    us4 = User(name='zhou', email='[email protected]', pswd='456789', role_id=ro1.id)
    # 添加数据
    db.session.add_all([us1, us2, us3, us4])
    # 将数据库保存到数据中当中去
    db.session.commit()
    app.run(debug=True)

执行完上面的代码,其实在我们的数据库中就有了一段数据

mysql> select * from tbl_users;
+----+-------+---------------+--------+---------+
| id | name  | email         | pswd   | role_id |
+----+-------+---------------+--------+---------+
|  1 | wang  | wang@163.com  | 123456 |       1 |
|  2 | zhang | zhang@189.com | 201512 |       2 |
|  3 | chen  | chen@126.com  | 987654 |       2 |
|  4 | zhou  | zhou@163.com  | 456789 |       1 |
+----+-------+---------------+--------+---------+

2,介绍相关操作

#查询所有的Role对象
li = Role.query.all()
Out[2]: [<db_demo.Role at 0x10388d190>, <db_demo.Role at 0x10388d310>]
In[3]:r = li[0]
#获取查询的第一个对象
In [8]: Role.query.first()
#根据主键来获取对象
In [11]: r = Role.query.get(2)


#这里再隆重介绍另外一中查询方式
In [15]: db.session.query(Role).all()

#根据对象的Id来查找
db.session.query(Role).get(2)

#查询第一个对象
db.session.query(Role).first()

#查询执行名字的对象 filter_by 是filter的特殊形式
User.query.filter_by(name="wang").all()
#多个限制条件叠加
User.query.filter_by(name="wang", role_id=1).first()

#使用filter来多条件查询
user = User.query.filter(User.name=="wang", User.role_id==1).all()

# 使用 _or 或条件查询
from sqlalchemy import or_
User.query.filter(or_(User.name=="wang", User.email.endwith("163.com"))).all()

# offset 偏移,跳过几条数据
User.query.offset(2).all() # 跳过两条数据,从第三条数据开始

# limit 限制获取多少条数据
User.query.offset(1).limit(2).all()

#根据相关的参数升序或者降序 这里的"-id"表示降序
User.query.order_by("-id").all()
#还有另外一种表达方式 升序是asc()
User.Query.order_by(User.id.desc()).all()

#目前这里使用的都是等于 那mysql里面的一些聚合函数怎么表达呢,下面的表达就类似mysql中的select role_id,cout(role_id) from User group role_id
from sqlalchemy import func
db.session.query(User.role_id,func.count(User.role_id)).group_by(User.role_id).all()
out:[(1L, 2L), (2L, 2L)]

# 上面介绍的是查询语句,接下来我们介绍下更新语句的写法

User.query.filter_by(name="zhou").update({"name":"python","email;":"[email protected]"})
# 修改是需要保存的,因此,需要提交到数据库
db.seesion.commit()

#删除操作
user = User。query.get(3)
db.session.delete(user)
db.session.commit()




猜你喜欢

转载自blog.csdn.net/jeekmary/article/details/87857661