flask_sqlalchemy

使用对象关系映射(Object-Relational Mapper, ORM)框架,它将低层的数据库操作指令抽象成高层的面向对象操作。也就是说,如果我们直接使用数据库引擎,我们就要写 SQL 操作语句,但是,如果我们使用了 ORM 框架,我们对诸如表、文档此类的数据库实体就可以简化成对 Python 对象的操作

SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架,可以自由的使用orm,其中flask-sqlalchemy是专门为flask指定的插件。

在 Flask-SQLAlchemy 中,数据库使用 URL 指定。

MySQL -->  mysql://username:password@hostname/database

安装

 pip install flask-sqlalchemy

对数据库操作

1. 如何创建数据库操作连接

from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)
db = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Trueclass User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True)email = db.Column(db.String(120), unique=True)

为了创建初始数据库,调用 SQLAlchemy.create_all() 方法来创建表和数据库:

   db.create_all()

您的数据库已经生成。现在来创建一些用户

admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')

但是它们还没有真正地写入到数据库中,因此让我们来确保它们已经写入到数据库中

db.session.add(admin)
db.session.add(guest)
db.session.commit()

2.创建关系型数据库表

SQLAlchemy 连接到关系型数据库,关系型数据最擅长的东西就是关系。因此,我们将创建一个使用两张相互关联的表的应用作为例子。
最为常见的关系就是一对多的关系。因为关系在它们建立之前就已经声明,您可以使用 字符串来指代还没有创建的类
关系使用 relationship() 函数表示。然而外键必须用类 sqlalchemy.schema.ForeignKey 来单独声明.

from datetime import datetime
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import pymysql
from sqlalchemy import descapp = Flask(__name__)
db = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:sheen@localhost/zaj_sql'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
bootstrap = Bootstrap(app)class User(db.Model):id = db.Column(db.Integer,autoincrement=True,primary_key=True)name = db.Column(db.String(50),unique=True)passwd = db.Column(db.String(100))add_time = db.Column(db.DATETIME,default=datetime.now())gender = db.Column(db.BOOLEAN,default=True)role_id = db.Column(db.INTEGER,db.ForeignKey('role.id'))def __repr__(self):return '<User:%s>' %(self.name)class Role(db.Model):id = db.Column(db.INTEGER,autoincrement=True,primary_key=True)name = db.Column(db.String(50),unique=True)users = db.relationship('User',backref='role')# 给Role模型添加users属性# backref 是定义反向引用def __repr__(self):return '<Role:%s>' % (self.name)
if __name__ =='__main__':# 1. 创建数据库表# db.drop_all()# db.create_all()# # 2. 创建role数据库表数据role_1 = Role(name='超级会员')role_2 = Role(name='普通会员')db.session.add(role_1)db.session.add(role_2)db.session.commit()# # # 3. 添加user表内数据,100个用户,50个为超级会员,50个为普通会员for i in range(1,13):if i%2 == 0:u = User(name='sheen'+str(i),passwd='sheen',role_id=1)db.session.add(u)else:u = User(name='star'+str(i),passwd='star',role_id=2)db.session.add(u)db.session.commit()

backref 是定义反向引用,可以通过User.role访问Role对象和属性。


查询所有数据

print('角色',Role.query.all())print('用户',User.query.all())

根据条件查询数据

# select * from tablename where xxx=xxxxxprint(User.query.filter_by(role_id=1).all())print(Role.query.filter_by().all())print(User.query.filter_by(role_id=2).all())


对于找到的数据进行更新

 print('进行数据更新',end='\n')u =User.query.filter_by(name='sheen2').first()print(u)u.passwd = '123'db.session.add(u)db.session.commit()


筛选数据方法2(filter),这种方法可以看见原生的sql语句

    print('数据筛选', end='\n')user = User.query.filter(User.role_id==1)print(user)


对于查询的信息进行显示限制

    print('限制查询数据的显示', end='\n')users = User.query.filter_by(role_id=1).limit(3).all()print(users)

对于查询的信息进行排序输出(默认情况由小到大进行排序), 如果想要由大到小: desc(User.add_time)

    print('数据再处理', end='\n')users = User.query.filter_by(role_id=1).order_by(desc(User.name)).all()print(users)

多个过滤函数

print('多个过滤函数', end='\n')users = User.query.filter_by(role_id=1).order_by(desc(User.name)).limit(3).offset(1).all()print(users)users = User.query.filter_by(role_id=1).order_by(desc(User.name)).slice(1,4).all()print(users)


分页,第一个参数表示显示第几页数据,第二个参数表示每页显示多少条数据

    print('分页显示', end='\n')users = User.query.paginate(1,5)print(users.items)users = User.query.paginate(2, 5)print(users.items)

python大佬养成计划----flask_sqlalchemy操作数据库相关推荐

  1. python大佬养成计划-----多进程

    进程 Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势.而使用多进程(Multiprocess),则可以 ...

  2. python大佬养成计划----HTML网页设计二

    文本标签 换行标签 -- br 是单标签,意味着它没有结束标签.起强制换行作用 段落中的文字<br>段落中的文字<br>段落中的文字<br> 水平分割线 -- hr ...

  3. python大佬养成计划----HTML网页设计一

    HTML简介 级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准. 它通过标记符号来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览 ...

  4. python大佬养成计划--协程实现TCP连接

    协程实现TCP连接 在网络通信中,每个连接都必须创建新线程(或进程) 来处理,否则,单线程在处理连接的过程中, 无法接受其他客户端的连接.所以我们尝试使用协程来实现服务器对多个客户端的响应. 与单一T ...

  5. pythondjango图书_python大佬养成计划----Django图书人物适配系统(后台)

    Django Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Pyt ...

  6. python操作windows库_python大佬养成计划----win下对数据库的操作

    数据库 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. win系统安装mysql,详见链接描述 数据库常见命令 mysql ...

  7. python太阳花的编程_python大佬养成计划----HTML DOM

    什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口. HTML DOM 定义了访问和操作 HTML 文档的标准方法. D ...

  8. python网页优化_python大佬养成计划----JavaScript对html的优化

    切换图片 当我们浏览网页时,时常出现图片轮播场景.实现用鼠标点击'下一页'时,更换图片的功能. #当前目录下建立img目录,存放图片,图片命名格式'img1.jpg' 图片切换 #snow_maps{ ...

  9. python中登录、注册操作数据库

    # 1.注册.登录# 1.注册的时候存账户密码到数据库里面,密码存密文,要加盐# 2.登录的时候账号.密码从数据里面取,登录失败一次,错误次数 + 1,错误次数大于3不让登录# 1.建表 id,use ...

最新文章

  1. LeetCode简单题之重新排列数组
  2. SAP WM Storage Type Search配置里的Storage Class WPC标记
  3. AI会让人类失业吗? 马云马化腾们不这么认为
  4. ThinkPHP如何判断一个更新操作是否成功
  5. 洛谷 P1024 一元三次方程求解
  6. linux 配置EPEL源
  7. DateFormat(炸窝)
  8. 有了它,从此走上炫酷的编码之路!
  9. 杭州微念申请李子柒商标被全部驳回,“最惨打工人”李子柒开始反击:已起诉!...
  10. web调试:ie缓存
  11. matplotlib使用参考地址
  12. Python3爬取妹子图——爬虫下载网络图片
  13. 2022显卡、CPU天梯图
  14. RestClient
  15. 数字信号处理经典书籍
  16. Couldn‘t find executable named person_subscriber below /home/yue/catkin_ws/src/... 找不到可执行文件的原因
  17. Win10系统无法使用VGAPlayer软件播放asf格式和VGA文件
  18. 使用RNN构建机器翻译模型
  19. 廊坊金彩教育:店铺标题怎么写
  20. 10款堪称神器的免费电脑软件推荐

热门文章

  1. 这样就能用MathType编辑^符号
  2. Storm构建分布式实时处理应用初探(转)
  3. 官方翻译不当导致的PowerShell运行失败一例
  4. 项目CPU异常高分析
  5. 为什么不应该使用“volatile”类型
  6. 框架中解决部分页面返回登录
  7. 如何处理“已超出域所允许创建计算机账户的最大值”
  8. ubuntu20.04 中ifconfig无ens33
  9. python numpy 数据类型为python对象-python numPy模块 与numpy里的数据类型、数据类型对象dtype...
  10. python神经网络风格_[Deep-Learning-with-Python]使用LSTM生成尼采风格文章