Flask(四)

Flask操作数据库:

需要提前安装:flask_sqlalchemy,(pip install flask_sqlalchemy)如果连接的是mysql数据库,需要安装mysqldb驱动;(pip install flask_mysqldb)

一对多:

代码如下:

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy

class Config(object):    """项目配置类"""    # 连接数据库    # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/py18"    # 跟踪数据库修改操作    SQLALCHEMY_TRACK_MODIFICATIONS = True

# 1:创建app对象app = Flask(__name__)# 加载项目配置app.config.from_object(Config)# 创建数据库对象db = SQLAlchemy(app)

# 定义数据库表模型类class User(db.Model):    # 设置表名称,不设置默认为类名的小写字母(user)    __tablename__ = "users"    # 定义字段    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    # role = Role()    # role.users:该角色下有哪些用户    # user=User()    # user.roles:该用户属于那种角色

# 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询    roles = db.relationship("Role", backref="users")

def __repr__(self):        """自定义格式化输出"""        return "Role: %s  %s" % (self.id, self.name)

# 自定义数据库表的模型类:db.Modelclass Role(db.Model):    __tablename__ = "role"    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    # 定义外键    role_id = db.Column(db.Integer, db.ForeignKey(User.id))

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

@app.route("/")def hello_world():    return "hello world!"

if __name__ == ‘__main__‘:    # 删除所有表    db.drop_all()    # 创建所有表    db.create_all()    app.run(debug=True)

多对多:

代码如下:

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy

class Config(object):    """项目配置类"""    # 连接数据库    # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/py18"    # 跟踪数据库修改操作    SQLALCHEMY_TRACK_MODIFICATIONS = True

# 1:创建app对象app = Flask(__name__)# 加载项目配置app.config.from_object(Config)# 创建数据库对象db = SQLAlchemy(app)

# 定义第三张表tb_user_role = db.Table("tb_user_role",                        db.Column("user_id", db.Integer, db.ForeignKey("user.id")),                        db.Column("role_id", db.Integer, db.ForeignKey("role.id"))                        )

# 定义数据库表模型类class User(db.Model):    # 设置表名称,不设置默认为类名的小写字母(user)    __tablename__ = "user"    # 定义字段    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    # role = Role()    # role.users:该角色下有哪些用户    # user=User()    # user.roles:该用户属于那种角色

# 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询    # TODO 添加第三张表    # secondary 指明第三张表, lazy提高性能,值返回结果对象,需要获取数据时需要".all()"才会展示出来    roles = db.relationship("Role",                            backref="user",                            secondary=tb_user_role,                            lazy="dynamic")

def __repr__(self):        """自定义格式化输出"""        return "Role: %s  %s" % (self.id, self.name)

# 自定义数据库表的模型类:db.Modelclass Role(db.Model):    __tablename__ = "role"    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    # 定义外键    role_id = db.Column(db.Integer, db.ForeignKey(User.id))

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

@app.route("/")def hello_world():    return "hello world!"

if __name__ == ‘__main__‘:    # 删除所有表    db.drop_all()    # 创建所有表    db.create_all()    app.run(debug=True)

//////////////////////////////////////////////////////////数据常用查询操作
from flask_sqlalchemy import SQLAlchemyfrom flask import Flaskfrom sqlalchemy import not_, and_, or_

class Config(object):    """项目配置类"""    SQLAlCHEMY_DATABASE_URI = "mysql://root:[email protected],1:3306/test18"    SQLALCHEMY_TRACK_MODIFICATIONS = True

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

class Role(db.Model):    """角色表"""    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    users = db.relationship("User", backref="role")    def __repr__(self):        return "Role:%s   %s" %(self.id, self.name)

class User(db.Model):    id= db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(128), unique=True)    email = db.Column(db.String(64))    password = db.Column(db.String(64))    # 定义外键    role_id = db.Column(db.Integer, db.ForeignKey(Role.id))

def __repr__(self):        return  "User:%s   %s %s %s" %(self.id, self.name, self.email, self.role_id)

@app.route("/")def hello_world():    return "hello world"

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]‘, password=‘123456‘, role_id=ro1.id)    us2 = User(name=‘zhang‘, email=‘[email protected]‘, password=‘201512‘, role_id=ro2.id)    us3 = User(name=‘chen‘, email=‘[email protected]‘, password=‘987654‘, role_id=ro2.id)    us4 = User(name=‘zhou‘, email=‘[email protected]‘, password=‘456789‘, role_id=ro1.id)    us5 = User(name=‘tang‘, email=‘[email protected]‘, password=‘158104‘, role_id=ro2.id)    us6 = User(name=‘wu‘, email=‘[email protected]‘, password=‘5623514‘, role_id=ro2.id)    us7 = User(name=‘qian‘, email=‘[email protected]‘, password=‘1543567‘, role_id=ro1.id)    us8 = User(name=‘liu‘, email=‘[email protected]‘, password=‘867322‘, role_id=ro1.id)    us9 = User(name=‘li‘, email=‘[email protected]‘, password=‘4526342‘, role_id=ro2.id)    us10 = User(name=‘sun‘, email=‘[email protected]‘, password=‘235523‘, role_id=ro2.id)    db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])    db.session.commit()    # 查询所有用户数据    User.query.all()    # 查询有多少个用户    User.query.count()    # 查询id为4的用户[3种方式]    User.query.get(4)    # filter_by精确查询    User.query.filter_by(id=4).first()    User.query.filter(User.id == 4).first()    # 查询名字结尾字符为g的所有数据[开始startswith/包含contains]    User.query.filter(User.name.endswith("g")).all()    User.query.filter(User.name.contains("g")).all()    # 查询名字不等于wang的所有数据[2种方式]    User.query.filter(User.name != "wang").all()    User.query.filter(not_(User.name == "wang")).all()    # 查询名字和邮箱都以"li"开头的所有数据[2种方式]    User.query.filter(User.name.startswith(‘li‘), User.email.startswith(‘li‘))    User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li")))    # 查询password是"123456"或者"email"以"itheima.com"结尾的邮箱    User.query.filter(or_(User.password == "123456", User.email.endswith("itheima.com")))    # 查询id为[1,3,5,7,9]的用户列表    # 使用in_()包含函数    User.query.filter(User.id in([1,3,5,7,9])).all()    # 查询name为liu的数据    User.query.filter(User.name =="liu").first()    # 查询所有用户数据,并以邮箱降序排列    User.query.filter(User.email.desc()).all()    # 将所有数据分页,每页3个,查询第二页的数据    # 参数1:第几页的数据, 参数2:每页多少条数据    paginate = User.query.paginate(2, 3)    # 获取当前页面所有数据    paginate.items    # 获取当前页码    paginate.page    # 获取总页数    paginate.pages    app.run(debug=True)


原文地址:https://www.cnblogs.com/zhouzetian/p/9692424.html

时间: 2024-11-10 20:03:47

Flask(四)的相关文章

Flask快速入门(2) — Flask四剑客与配置文件

目录 Flask四剑客 配置文件的方式 第一种方式 第二种方式 第三种方式 第四种方式 其他方式 Flask四剑客 在Django中后端返回响应有几种形式:render(前端渲染页面).redirect(重定向跳转).HttpResponse(直接返回).JsonResponse(实际内部继承了HttpResponse,返回json字符串). 在Flask中也有相对的返回机制: render:前端渲染页面 redirect_:重定向跳转 jsonify:返回json字符串 return 'xx'

Flask 四剑客

Flask 四剑客 返回字符串,返回 html , 跳转路由,返回 json from flask import Flask, render_template, redirect, jsonify app = Flask(__name__) @app.route('/index/') def index(): # 返回字符串 # return 'hello flask' # 返回一个 HTML # 从 flask 里面导入 render_template # 在同级目录中添加templates文

flask四:URL两种传参方式(路径传参和get传参)

新建一个视图 第一种:路径传参:url/参数:<参数名>,然后再视图函数中接收参数 也可以指定数据类型 string:默认使用此数据类型,接收没有任何斜杠"\/"的文本int:接收整形float:接收浮点型path:和string的类似,但是可以接受斜杠 uuid:只接收符合uuid的字符串,一般用于表的主键 使用uuid:10190dee-d9d4-4429-ad51-22f24c0a5ee1 any:可以指定多种数据类型.可以在一个url中映射多个资源 第二种:get传

Flask的基本使用、四剑客和配置文件

Flask简介 安装 pip install flask 使用 # 1.导入flask from flask import Flask # 2.生成一个Flask对象,__name__表示当前文件的名字 app = Flask(__name__) # 3.添加路由,flask用的是装饰器的模式 # 注册路由,并写响应函数hello_world @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__ma

Flask.3

Flask四大内置对象 request session g global 全局 帮助我们实现全局数据共享 生命周期:在单次请求中 config 或者 app 就是当前运行的项目 获取当前运行的App的位置 应该是存在价值和意义的 钩子函数 编程模型 OOP 面向对象编程 POP 面向过程编程 IOP 面向接口编程 AOP 面向切面编程 动态介入到既有流程中 重要概念 切点 请求前 请求后 请求异常 切面 请求前 request 请求后 request response 请求异常 exceptio

Flask+Vue 初试牛刀

------------------------------------------------------------------------------------------------------------------ 工具: pycharm python vscode vue ---------------------------------------------------------------------------------------------------------

python django框架(一)

s4day63内容回顾: 1. 安装 2. 创建用户 + 授权 3. 连接 - 数据库 终端创建数据库(字符编码) - 数据表 终端 ORM pymysql create ...)engine=innodb - 数据行 增 删 改 查 - limit - group by .... 关闭 问题:简述ORM原理? day64内容 1. 自己开发Web框架 - socket - http协议 - HTML知识 - 数据库(pymysql,SQLAlchemy) HTTP特点: 无状态.短连接 TCP

python中常用第三方库记录

python中有很多很好用的第三方库,现在记录一下这些库以及如何下载 一.virtualenv,这是一个可以将生产环境隔离开的python库,非常好用 在linux下使用pip install virtualenv window下建议使用virtualenvwrapper-win, pip install virtualenvwrapper-win 这个库的简单入门使用请一步另一篇文章 http://www.cnblogs.com/lgh344902118/p/7010797.html 二.re

Flask 学习(四)静态文件

Flask 学习(四)静态文件 动态 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件.理想情况下你的服务器已经配置好提供静态文件的服务. 在开发过程中, Flask 也能做好这个工作. 静态文件引用 我们先来看下普通的 html 引用静态文件,如 css(js也同样,就不多加示例了),以下为一简单实例,直接打开html: flask 处理 —— static 若直接将该html 当成 flask 模板,相对路径自然就失效了,静态文件将不会被成功读取. 那在flask中