python的基础以及提高

python day45_Flask入门

2018-07-18  本文已影响0人  g_s_007

数据库基本操作

Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。

会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit()方法提交会话。
Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。

最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

常用的SQLAlchemy查询过滤器

14.JPG

常用的SQLAlchemy查询执行器

15.JPG

创建表

db.create_all()

删除表

db.drop_all()

注意!!!

创建表和删除表 只是我们在初学阶段使用 以后真正开发 不会用

具体示例操作

需求: 创建两张表 一个用户表一个角色表,使用SQLAlchemy 进行基本的增删改查

创建表并添加数据:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
# manager = Manager(app)
# 配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 数据库
my_db = SQLAlchemy(app)
# 创建模型
class User(my_db.Model):
    __tablename__ = 't_user'
    id = my_db.Column(my_db.Integer,primary_key=True)
    name = my_db.Column(my_db.String(64),unique=True)
    email = my_db.Column(my_db.String(64),unique=True)
    password = my_db.Column(my_db.String(64))
    # 在多的一方 定义外键
    role_id = my_db.Column(my_db.Integer,my_db.ForeignKey('t_role.id'))



class Role(my_db.Model):
    __tablename__ = 't_role'
    id = my_db.Column(my_db.Integer,primary_key=True)
    name = my_db.Column(my_db.String(64),unique=True)
    # 在一的一方 定义关系引用
    users = my_db.relationship('User',backref = 'role')


if __name__ == '__main__':
    my_db.drop_all()
    my_db.create_all()
    ro1 = Role(name='admin')
    my_db.session.add(ro1)
    my_db.session.commit()
    # 再次插入一条数据
    ro2 = Role(name='user')
    my_db.session.add(ro2)
    my_db.session.commit()
    us1 = User(name='wang', email='wang@163.com', password='123456', role_id=ro1.id)
    us2 = User(name='zhang', email='zhang@189.com', password='201512', role_id=ro2.id)
    us3 = User(name='chen', email='chen@126.com', password='987654', role_id=ro2.id)
    us4 = User(name='zhou', email='zhou@163.com', password='456789', role_id=ro1.id)
    us5 = User(name='tang', email='tang@baidu.com', password='158104', role_id=ro2.id)
    us6 = User(name='wu', email='wu@gmail.com', password='5623514', role_id=ro2.id)
    us7 = User(name='qian', email='qian@gmail.com', password='1543567', role_id=ro1.id)
    us8 = User(name='liu', email='liu@baidu.com', password='867322', role_id=ro1.id)
    us9 = User(name='li', email='li@163.com', password='4526342', role_id=ro2.id)
    us10 = User(name='sun', email='sun@163.com', password='235523', role_id=ro2.id)
    my_db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])
    my_db.session.commit()
    # app.run(debug=True)

查询:

"""查询所有用户数据
查询有多少个用户
查询第1个用户
查询id为4的用户[3种方式]
查询名字结尾字符为g的所有数据[开始/包含]
查询名字不等于wang的所有数据[2种方式]
查询名字和邮箱都以 li 开头的所有数据[2种方式]
查询password是 `123456` 或者 `email` 以 `itheima.com` 结尾的所有数据
查询id为 [1, 3, 5, 7, 9] 的用户列表
查询name为liu的角色数据
查询所有用户数据,并以邮箱排序
每页3个,查询第2页的数据"""

进入ipython:
    
"""
#查询所有用户数据
User.query.all()

#查询有多少个用户
User.query.count()

#查询第1个用户
User.query.first()

#查询id为4的用户[3种方式]
User.query.get(4)
User.query.filter_by(id=4).first()
User.query.filter(User.id==4).first()

#基本查询两个都可以. filter更强大, 可以支持更多的查询语句


#查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.name.endswith("g")).all()
User.query.filter(User.name.contains("o")).all()


#查询名字不等于wang的所有数据[2种方式]
from sqlalchemy import not_
User.query.filter(not_(User.name == 'wang')).all()
User.query.filter(User.name != 'wang').all()


#查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
In [22]: User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))).all()

In [23]: User.query.filter(User.name.startswith("li"), User.email.startswith("li")).all()

#查询password是 `123456` 或者 `email` 以 `baidu.com` 结尾的所有数据
User.query.filter(or_(User.password=="123456", User.email.endswith("itheima.com"))).all()

#查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()

#查询name为liu的角色数据
user = User.query.filter(User.name=='liu').first()
user.role.name



#查询所有用户数据,并以邮箱排序
User.query.order_by('email').all()


#每页3个,查询第2页的数据
# 第一个参数是:第几页,第二个参数是每页个数 第三个参数是error信息 不显示
paginate = User.query.paginate(2, 3, False)

paginate.items # 查询数据

paginate.page # 当前页数

paginate.pages # 总页数

数据库迁移

安装及执行

上一篇 下一篇

猜你喜欢

热点阅读