Python flask sqlalchemy的简单使用及常用操作

目录
  • 前言
  • flask sqlalchemy的配置使用
  • sqlalchemy的增删改查
    • 查询数据
    • 增加数据
    • 修改数据
    • 删除数据
  • 总结

前言

说到面向对象,大家都不陌生。关系型数据库也是后端日常用来存储数据的,但数据库是关系型的,因此,ORM通过对象模型和数据库的关系模型之间建立映射,我们就能像操作对象一样来操作数据库。 ORM的优点主要是面向对象编程,不需写原生SQL,用操作对象的方式访问数据。当然,缺点就是当遇到复杂的操作时,ORM就不那么好写了,还有就是加了一层映射,执行效率低于原生sql。不过,对于大部分项目来说,这些缺点都是可以接受的。牺牲的性能可以接受;有复杂操作时,实现就用原生SQL,ORM执行罢了。

flask sqlalchemy的配置使用

在python中,常用的ORM工具就是sqlalchemy了。下面就以一个简单的flask例子来说明吧。

首先,写一个最简单的flask项目,代码如下:

from flask import Flask

app = Flask(__name__)
@app.route('/')
def orm_test():
    return "hello"

接下来我们导入ORM配置,添加如下代码:

from flask_sqlalchemy import SQLAlchemy

def orm_config():
    url = "mysql+mysqlconnector://{user}:{pwd}@{host}:{port}/{db_name}?charset=utf8"
    orm_conf = {
        'SQLALCHEMY_DATABASE_URI': url
    }
    return orm_conf

# ORM 设置
app.config.from_mapping(orm_config)
db = SQLAlchemy(app)

这样我们就将ORM配置OK了。

  • 然后我们新增一个表table1的model
# model表名
class Table1(db.Model):
    # 表名
    __tablename__ = "table1"

    id = db.Column(db.Integer, primary_key=True)
    col = db.Column(db.String(64), nullable=False, unique=True, comment='字段释义')

以上配置这是在数据源只有一个库的时候,但很多时候我们还需要访问别的库,这时需要在ORM配置和model上做一些设置。

ORM配置中需要用到SQLALCHEMY_BINDS来添加数据库, model中__bind_key__来指定数据库了。

具体修改如下:

修改ORM配置:

def orm_config():
    url = "mysql+mysqlconnector://{user}:{pwd}@{host}:{port}/{db_name}?charset=utf8"
    # 指定的别库
    other_url = "mysql+mysqlconnector://{user1}:{pwd1}@{host1}:{port1}/{db_name1}?charset=utf8"
    orm_conf = {
        'SQLALCHEMY_DATABASE_URI': url,
        # 添加别库
        "SQLALCHEMY_BINDS":{
                "other_db":other_url
            },
    }
    return orm_conf

表model指定库:

class Table2(db.Model):
    # 指定别库
    __bind_key__ = 'other_db'
    __tablename__ = "table2"

    id = db.Column(db.Integer, primary_key=True)
    col = db.Column(db.String(64), nullable=False, unique=True, comment='字段释义')

最后,我们在接口中使用下ORM。

@app.route('/')
def orm_test():
    # 查询table1数据
    rows = Table1.query.filter(Table1.id<5)
    res = []
    for row in rows:
        dict = {
            "id": row.id,
            "col": row.col
        }
        res.append(dict)
    return "hhh"

当我们遇到复杂操作,不知道ORM语法该怎么写时,还可以直接用原生sql + ORM session execute的方式执行,示例如下:

sql = "select count(*) as cnt from table1 group by col"
rows = db.session.execute(sql)

以上例子我们是查询table1表的id<5的数据。

完整代码如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
def orm_config():
    url = "mysql+mysqlconnector://{user}:{pwd}@{host}:{port}/{db_name}?charset=utf8"
    other_url = "mysql+mysqlconnector://{user1}:{pwd1}@{host1}:{port1}/{db_name1}?charset=utf8"
    orm_conf = {
        'SQLALCHEMY_DATABASE_URI': url,
        "SQLALCHEMY_BINDS":{
                "other_db":other_url
            },
    }
    return orm_conf

# ORM 设置
app.config.from_mapping(orm_config)
db = SQLAlchemy(app)

# model表名
class Table1(db.Model):
    # 表名
    __tablename__ = "table1"

    id = db.Column(db.Integer, primary_key=True)
    col = db.Column(db.String(64), nullable=False, unique=True, comment='字段释义')

class Table2(db.Model):
    # 指定库
    __bind_key__ = 'other_db'
    __tablename__ = "table2"

    id = db.Column(db.Integer, primary_key=True)
    col = db.Column(db.String(64), nullable=False, unique=True, comment='字段释义')

@app.route('/')
def orm_test():
    # 查询table1数据
    rows = Table1.query.filter(Table1.id<5)
    res = []
    for row in rows:
        dict = {
            "id": row.id,
            "col": row.col
        }
        res.append(dict)
    return "hhh"
if __name__ =="__main__":
    app.run()

sqlalchemy的增删改查

刚开始接触sqlalchemy时,对于语法不熟悉,写代码也是比较痛苦的。这里总结下sqlalchemy常用的语法吧。

查询数据

# 查询id<5的数据
q = Table1.query.filter(Table1.id<5)
# 查询过滤用 and、or
from sqlalchemy import and_, or_
q = Table1.query.filter(and_(Table1.id<5, Table1.col=='掘金'))
q = Table1.query.filter(or_(Table1.id<5, Table1.col=='掘金'))
# 查询过滤用in(语法:model.{字段名}.in_({列表}))
q = Table1.query.filter(Table1.id.in_([1,2,3]))
# 连表查询
q = Table1.query.join(Table2, Table2.id==Table1.id) \
                   .filter(Table1.id<5)

# 解析数据
res = {'data': [dict(i) for i in q]}
# 查询数据count
count = q.count()

增加数据

row = Table1(id=1, col='掘金')
db.session.add(row)
db.seesion.commit()

修改数据

 row = Table1.query.filter(Table1.id<5)
 update_data = {"col": "掘金"}
 row.update(update_data)
 db.session.commit()

删除数据

row = Table1.query.filter(Table1.id<5)
row.delete()
db.session.commit()

备注: 增删改都要commit()

总结

我们在工程代码中使用sqlalchemy时,在配置时记得根据实际情况添加相关配置参数,比如连接池的数量、自动回收连接的秒数等等。

到此这篇关于Python flask sqlalchemy的简单使用及常用操作的文章就介绍到这了,更多相关Python flask sqlalchemy内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python使用Flask-SQLAlchemy连接数据库操作示例

    本文实例讲述了Python使用Flask-SQLAlchemy连接数据库操作.分享给大家供大家参考,具体如下: 需要安装flask pip install flask 安装Mysql-Python (这个是py的mysql驱动,这个在官方没有win的支持,只有第三方才有py2.7的whl) pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl 注:上述whl文件也可点击此处链接下载到本地安装:https://www.lfd.uci.edu/

  • Python的Flask框架中SQLAlchemy使用时的乱码问题解决

    一.问题 这两天在学习使用flask + SQLAlchemy 定制一个web查询页面的demo ,在测试时,发现查询到的结果显示乱码 .这里将解决方法记录下. 二.解决思路 1.flask 程序上定位 flask的文档中提到可以通过设置SQLALCHEMY_NATIVE_UNICODE来禁止使用SQLAlchemy默认的Unicode编码.有可能是SQLAlchemy默认的Unicode编码不是UTF-8,抱着这样的想法,在程序中指定了"SQLALCHEMY_NATIVE_UNICODE=Fa

  • Python利用flask sqlalchemy实现分页效果

    Flask-sqlalchemy是关于flask一个针对数据库管理的.文中我们采用一个关于员工显示例子. 首先,我们创建SQLALCHEMY对像db. from flask import Flask, render_template,request from flask_sqlalchemy import SQLAlchemy app = Flask(__name__,static_url_path='') app.debug = True app.secret_key = "faefasdfa

  • 在Python的Flask框架下使用sqlalchemy库的简单教程

    flask中的sqlalchemy 相比于sqlalchemy封装的更加彻底一些 , 在一些方法上更简单 首先import类库: 在CODE上查看代码片派生到我的代码片 <span style="font-size:18px;">from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy</span> 然后,需要加载 数据库路径 在CODE上查看代码片派生到我的代码片 <span

  • 在Python程序和Flask框架中使用SQLAlchemy的教程

    ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的时候小心翼翼的写着sql,心中总是少不了恐慌,万一不小心sql语句出错,搞坏了数据库怎么办?又或者为了获取一些数据,什么内外左右连接,函数存储过程等等.毫无疑问,不搞懂这些,怎么都觉得变扭,说不定某天就跳进了坑里,叫天天不应,喊地地不答. ORM 的出现,让畏惧SQL的开发者,在坑里看见了爬出去的绳索,仿佛天空并不是那么黑暗,至少再暗,我们也有了眼睛.顾名思义,ORM 对象关系映射,简而言之,就是把数据库的一个个table(表),映射为编程语

  • Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程

    使用Flask-SQLAlchemy管理数据库 Flask-SQLAlchemy是一个Flask扩展,它简化了在Flask应用程序中对SQLAlchemy的使用.SQLAlchemy是一个强大的关系数据库框架,支持一些数据库后端.提供高级的ORM和底层访问数据库的本地SQL功能. 和其他扩展一样,通过pip安装Flask-SQLAlchemy: (venv) $ pip install flask-sqlalchemy 在Flask-SQLAlchemy,数据库被指定为URL.表格列出三个最受欢

  • Python flask sqlalchemy的简单使用及常用操作

    目录 前言 flask sqlalchemy的配置使用 sqlalchemy的增删改查 查询数据 增加数据 修改数据 删除数据 总结 前言 说到面向对象,大家都不陌生.关系型数据库也是后端日常用来存储数据的,但数据库是关系型的,因此,ORM通过对象模型和数据库的关系模型之间建立映射,我们就能像操作对象一样来操作数据库. ORM的优点主要是面向对象编程,不需写原生SQL,用操作对象的方式访问数据.当然,缺点就是当遇到复杂的操作时,ORM就不那么好写了,还有就是加了一层映射,执行效率低于原生sql.

  • python+flask编写一个简单的登录接口

    在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试 1.编写一个登录的接口 2.在pycharm运行 3.使用apipost进行登录接口测试 输入url和参数值进行访问,访问成功. 4.在pycharm查看是否正常进行访问 5.在编写一个需要登录返回的token直接访问的查询接口 6.运行登录和查询两个接口 7.使用apipost进行登录和查询的接口测试 首先进行登录的接口测试获取返回的token 使用登录返回的token值进行查询的接口测

  • python flask开发的简单基金查询工具

    项目地址: https://github.com/guodongggg/fund 1) 启动方法 (非必须)修改new.csv,参照test.csv,首行为基金代码,其次为每支基金在指定日期内的操作,正值为买入金额,负值为赎回份额.具体项目参照x_alpha项目 修改code_list.json文件的prodect为你自己的基金代码,修改count为每支基金的金额,执行同级目录下的update_code_list.py,自动更新持仓百分比 执行python run.py ps:初始化比较麻烦,我

  • Python+Flask编写一个简单的行人检测API

    目录 前提条件 实验环境 项目结构 主要代码 运行结果 前提条件 1.了解Python语言,并会安装第三方库 2.了解Python Web Flask框架 3.了解PyTorch深度学习框架 实验环境 Python 3.6.2 PyTorch 1.7.1 Flask 1.1.1 Numpy 1.18.5 Opencv 3.4.2 PIL pip3 install pillow 项目结构 相关说明: static:用于存储静态文件,比如css.js和图片等 templates:存放模板文件 upl

  • python flask sqlalchemy连接数据库流程介绍

    1.安装flask_sqlalchemy和pymysql包 pip install flask-sqlalchemy pip install pymysql 2.进行配置 使用Flask-SQLAlchemy扩展操作数据库,首先需要通过URL建立数据库连接,必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI中. HOSTNAME = '127.0.0.1'PORT     = '3306'DATABASE = 'flask_test'USERNAME = 'root'P

  • Python中字典的基础介绍及常用操作总结

    目录 1.字典的介绍 2.访问字典的值 (一)根据键访问值 (二)通过get()方法访问值 3.修改字典的值 4.添加字典的元素(键值对) 5.删除字典的元素 6.字典常见操作 1.len 测量字典中键值对的个数 2. keys 返回一个包含字典所有KEY的列表 3. values 返回一个包含字典所有value的列表 4. items 返回一个包含所有(键,值)元祖的列表 5.遍历字典的key(键) 6.遍历字典的value(值) 7.遍历字典的items(元素) 8.遍历字典的items(键

  • Python中元组的基础介绍及常用操作总结

    目录 1.元组的介绍 2.访问元组 3.修改元组(不可以修改的) 4.元组的内置函数有count,index 5.类型转换 1.将元组转换为列表 2.将元组转换为集合 1.元组的介绍 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 元组的格式: tup=('a','b','c','d') 2.访问元组 元组可以使用下标索引来访问元组中的值,下标索引从0开始 例如: tup=('a','

  • Python和Excel的完美结合的常用操作案例汇总

    目录 前言 Python和Excel的交互 vlookup函数 绘图 柱状图 雷达图 前言 在以前,商业分析对应的英文单词是Business Analysis,大家用的分析工具是Excel,后来数据量大了,Excel应付不过来了(Excel最大支持行数为1048576行),人们开始转向python和R这样的分析工具了,这时候商业分析对应的单词是Business Analytics. 其实python和Excel的使用准则一样,都是[We don't repeat ourselves],都是尽可能

  • Python xlrd/xlwt 创建excel文件及常用操作

    一.创建excel代码 备注:封装好了(可直接调用) """ -*- coding:utf-8 -*- @Time :2020/8/20 21:02 @Author :Jarvis @File :jar_excel_util.py @Version:1.0 """ from typing import List import xlwt class JarExcelUtil: def __init__(self, header_list: List

  • Python中快速掌握Data Frame的常用操作

    掌握Data Frame的常用操作 一. 查看DataFrame的常用属性 DataFrame基础属性有:values(元素).index(索引).columns(列名) .dtypes(类型).size(元素个数).ndim(维度数)和 shape(形状大小尺寸),还有使用T属性 进行转置 import pandas as pd detail=pd.read_excel('E:\data\meal_order_detail.xlsx') #读取数据,使用read_excel 函数调用 # pr

随机推荐