Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。

1、安装

1).安装flask-sqlalchemy

pip install flask-sqlalchemy

2). 安装mysqldb

pip install flask-mysqldb

2、配置

1). 程序使用的数据库URL必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI键中。

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@127.0.0.1:3306/test'

2). 其他

配置对象中还有一个很有用的选项,即SQLALCHEMY_COMMIT_ON_TEARDOWN键,将其设为True时,每次请求结束后都会自动提交数据库中的变动。

配置的列表如下:

3). 连接数据库

不同的数据库采用不同的引擎连接语句:

(1)MySQL: mysql://username:password@hostname/database

(2)SQLite(Unix): sqlite:absolute/path/to/database

(3)SQLite(Windows): sqlite:///c:/absolute/path/to/database

(4)Oracle: oracle://username:password@127.0.0.1:3306/database

参考代码如下:

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 设置连接数据库的URL

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@127.0.0.1:3306/test'

# 设置每次请求结束后会自动提交数据库的改动

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查询时显示原始SQL语句

app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)

3、定义模型

在ORM中,模型一般是一个Python类,类中的属性对应数据库表中的列。

Flask-SQLAlchemy创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结构。

常用的sqlalchemy字段类型:

常用的sqlalchemy列表项

常用的sqlalchemy关系选项

参考代码如下:

class Role(db.Model):

__tablename__ = 'roles'

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(64))

user = db.relationship('User', backref='role')

def __repr__(self):

return '' % self.name

class User(db.Model):

__tablename__ = 'users'

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(64), unique=True, index=True)

email = db.Column(db.String(64), unique=True)

pswd = db.Column(db.String(64))

role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

def __repr__(self):

return 'User:%s' % self.name

4、操作数据库

创建表:db.create_all()

删除表: db.drop_all()

插入行:

db.session.add()

db.session.addAll([])

db.session.commit()

查询全部数据: User.query.all()

过滤查询: User.query.filter_by(id=id).first()

join多表查询:User.query.filter_by(env_id=env_id,id=id).join(Environments,Variable.env_id == Environments.id).first_or_404()

count返回数量: User.query.filter_by(id=id).count()

修改数据

#根据条件查询一行数据

admin_role = Role.query.filter_by(role_name = 'Amdmin').first()

#修改数据-

admin_role.role_name = 'Admin'

db.session.add(admin_role)

db.session.commit()

删除数据:

db.session.delete(User)

db.session.commit()

删除多条数据

variablelists= Variable.query.filter_by(env_id=env_id).all()

for var in variablelists:

db.session.delete(var)

db.session.commit()

直接执行sql语句

sql = u""" update net_internet_ip set removed = current_timestamp() where uuid not in :uuid and removed is null

"""

results = db.session.execute(sql, {"uuid": uuid})

全部代码

全部代码如下,经测试,已跑通。

#!/usr/bin/python

# -*- coding: utf-8 -*-

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 设置连接数据库的URL

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@127.0.0.1:3306/test'

# 设置每次请求结束后会自动提交数据库的改动

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 查询时显示原始SQL语句

app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)

class Role(db.Model):

__tablename__ = 'roles'

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(64))

user = db.relationship('User', backref='role')

def __repr__(self):

return '' % self.name

class User(db.Model):

__tablename__ = 'users'

id = db.Column(db.Integer, primary_key=True)

name = db.Column(db.String(64), unique=True, index=True)

email = db.Column(db.String(64), unique=True)

pswd = db.Column(db.String(64))

role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

def __repr__(self):

return 'User:%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='zhangsan', email='zhangsan@qq.com',pswd='12345a',role_id=ro1.id)

us2 = User(name='lisi', email='lisi@qq.com', pswd='12345a', role_id=ro2.id)

db.session.add_all([us1, us2])

db.session.commit()

app.run(debug=True)

flask-sqlalchemy mysql_flask-sqlalchemy总结相关推荐

  1. flask-sqlalchemy mysql_Flask SQLAlchemy连接到MySQL数据库

    设置代码: 我正在构建一个带有AngularJS前端的基本Flask应用程序,目前我需要连接到我用Godaddy phpmyadmin托管的MySQL数据库. 这是我的一部分__init__.pyfr ...

  2. flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo

    main.py import uuid # UUID: 通用唯一标识符 # from flask import Flask from flask import Flask, request, json ...

  3. 【Flask项目】sqlalchemy原生sql查询,返回字典形式数据

    在原生sql查询的时候,返回一个list,内部是tuple,他们看似是tuple,实则并不是 而是一个特殊的类型"<class 'sqlalchemy.util._collection ...

  4. Flask入门之SQLAlchemy数据库连接操作(第15讲)

    一.库安装 Flask-SQLAlchemy 2 SQLAlchemy 1.0.8 二.进入venv 三.切换到项目Sample\ 文件夹,进入manager.py 的shell python man ...

  5. wins系统flask绑定mysql_flask如何连接mssql,网上大多是sqlite和mysql教程?

    这个居然也冒出来,刨坟了. 我们不喜欢写原生SQL语句,那个写着费劲,日常开发时候,我们怎么CRUD数据库呢?一般使用ORM,对象关系映射(英语:Object Relational Mapping,简 ...

  6. python安装sqlalchemy python2_Python SQLAlchemy --2

    本文為 Python SQLAlchemy ORM 一系列教學文: 接下來會更深入地探討查詢的使用. 查詢的基本使用法為 session.query(Mapped Class),其後可加 .group ...

  7. flask jinja2 mysql_flask/jinja2 SSTI注入学习

    0x00 前言 服务端模板注入(SSTI)攻击,可以看看James Kettle写的这篇文章. flask出现模板注入原因主要还是因为使用了render_template_string函数 0x01 ...

  8. flask使用SQLAlchemy操作mysql

    2019独角兽企业重金招聘Python工程师标准>>> 注意:看这篇博客需要先看我之前写的一篇博客,在 https://my.oschina.net/zhuangweihong/bl ...

  9. 用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 前言 Models 模型 SQLAlchemy 安装 SQL ...

  10. mysql flaskalchemy_python flask sqlalchemy 数据库mysql操作

    第一步app.py: # coding=utf-8 import urllib from flask import Flask from werkzeug.routing import BaseCon ...

最新文章

  1. 那些伤害不大,侮辱性极强的瞬间
  2. ESXI开启snmp协议方法
  3. word 2010 从第三页开始设置页码
  4. DbgView软件 查看VC++ MFC 程序的打印信息
  5. 看懂堆排序——堆与堆排序(三)
  6. 音频录入后以不同采样率输出
  7. 大四实习有点晚[转载]
  8. SAP UI5 sap.ui.vk 命名空间内的控件介绍
  9. woocommerce 分类到菜单_Woocommerce商店显示分类
  10. GOF设计模式之1:单例设计模式
  11. 利用nginx重写url参数并跳转
  12. mysqldump的一些用法
  13. 【能量检测】基于认知无线电的能量检测算法的matlab仿真
  14. 80ms 求解世上最难数独 —— DFS的灵活运用
  15. 动词ing形式的5种用法_动词ing形式的用法及变化规则 | 学思外教
  16. 看电脑头痛计算机专业,看电脑头疼怎么回事
  17. 图的有权最短路径及Dijkstra算法
  18. vue+腾讯地图标记弹框
  19. ERP流程二 实体类大全
  20. 黎曼积分并非战无不胜

热门文章

  1. 消息中间件在分布式系统中的作用及介绍
  2. 小马智行完成D轮融资首次交割 估值达85亿美元
  3. 微信加入新功能,60秒语音不必从头听到尾,网友:还需要进度条
  4. 王思聪名下企业被拍卖1100万债权,此前还债20亿 网友:拍下等于“接盘侠”?...
  5. 不玩了?王思聪退出香蕉娱乐董事长职务,麻闻多接任
  6. iQOO Z5内置5000mAh大电池:超长续航安全感爆棚
  7. 继淘宝特价版之后 闲鱼已向微信提交小程序申请
  8. 华为P50造型没跑了,后摄造型有点吓人!
  9. 一夜抢空880万!中国最狠印钞机,终于开始收割年轻人了
  10. 游族网络:已获得《三体》系列小说游戏开发、改编等权利