flask-sqlalchemy插件使用

2023-11-03

1.Flask-SQLAlchemy插件的使用

  • 该插件对SQLAlchemy进行了简单的封装,使得我们可以更加简单的使用。
  1. 初始化数据库,无需导入create_engine
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
HOSTNAME = '127.0.0.1'
DATABASE = 'flask_sqlalchemy'
PORT = 3306
USERNAME = 'root'
PASSWORD = 'root'

DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

app = Flask(__name__)

# 映射数据库
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
  1. 对于orm的使用,此前使用Base = declarative_base()初始化初类,在该插件中更加简单,全部继承Model类即可

class User(db.Model):
    __tablename__ = 'user'#表格可以有可以没有,表名会自动小写

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))

    def __repr__(self):
        return 'User(name:{})'.format(self.name)
        
class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(50))
    uid = db.Column(db.Integer, db.ForeignKey('user.id'))

    author = db.relationship('User', backref='articles')
  • 所有的类都继承db.Model,同时相关Column字段的属性都成为db的属性。
  1. 创建表格和更新数据更加简单
db.drop_all()
db.create_all()

# 添加数据
# user = User(name='duke')
# article=Article(title='python')
#
# article.author = user
# db.session.add(article)
# db.session.commit()


# 查询数据:直接将query属性放在db.Modedl之上
# user = User.query.all()
# print(user)
加上session一样可以
# user = db.session.query(User).all()
# print(user)

#删除数据
user = User.query.filter(User.name =='lihua').first()
db.session.delete(user)
db.session.commit()

2.Flask-Script

  • Flask-Script:可以通过命令行的方式操作Flask。通过命令跑一个开发版本的服务器,设置数据库等等。
from flask_script import Manager
from flask_sqlchemy import app

manage = Manager(app)


@manage.command
def index():
    return 'hello'


@manage.option('-n', '--name', dest='name')
@manage.option('-u', '--url', dest='url')
def hello(name, url):
    print('hello', name, url)


if __name__ == '__main__':
    manage.run()
  • 将脚本命令放在manage.py文件夹中,在终端运行python manage.py -n --duke 就可以输出duke
    定义命令的三种方式
  1. 使用@command装饰器
from flask_script import Manager
from flask_sqlalchemy import app

manager = Manager(app)

@manager.command
def hello():
    print('hello')

if __name__ == '__main__':
    manager.run()
  1. 使用类继承Command类
from flask_script import Command,Manager
from flask_sqlalchemy import app

manager = Manager(app)

class Hello(Command):
	option_list = (
	Option('--name','-n',dest='name'),
)#在类中添加参数    
"prints hello world"

    def run(self):
        print("hello world")

manager.add_command('hello',Hello())


#使用类的方式:
1.必须继承Command基类
2.必须实现run方法
3.必须通过add_command方法添加命令
  1. 使用option装饰器:可以在装饰器里传递相应的参数
@manager.option('-n','--name',dest='name')
def hello(name):
    print('hello ',name)

用法:

python manage.py -n duke
python manage.py --name duke
  • 可以通过使用get_options方法动态的做一些事情。
class Hello(Command):
  def __init__(self,default_name='Joe'):
self.default_name = default_name

  def get_options(self):
      return [
          Option('-n','--name',dest='name',default=self.default_name),
      ]

  def run(self,name):
      print('hello',name)

3.Flask_Migrate

  • 在开发过程中,经常会发生数据库修改的行为,当数据较少的时候,可以轻易手动修改数据库,在orm模型中,我们可以直接修改模型再将其映射到数据库里,工具flask_migrate是基于Alembic进行的一个封装,它可以跟踪模型的变化,并将变化映射到数据库中。
  • 使用flask_migrate管理app中的数据库,需要使用migrate(app,db)来绑定app和数据库。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from constants import DB_URI
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
# 绑定app和数据库
migrate = Migrate(app,db)

class User(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(20))

    addresses = db.relationship('Address',backref='user')

class Address(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    email_address = db.Column(db.String(50))
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))

db.create_all()

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()
  • manage.py文件:该文件主要用于存放映射数据库的命令MigrateCommand是集成的一个命令,添加到脚本命令中,需要采用manager.add_command(‘db’,MigrateCommand)的方式,在终端执行python manage.py db xxx就是执行该命令。
from flask_script import Manager
from flask_migrate import MigrateCommand, Migrate
from exts import db
from demo import app
from models import User

manage = Manager(app)
Migrate(app, db)
manage.add_command("db", MigrateCommand)

if __name__ == '__main__':
    manage.run()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flask-sqlalchemy插件使用 的相关文章

  • scipy.optimize on pandas dataframe

    我试图搜索它 但结果很差 有人可以向我解释一下如何在 Pandas DataFrame 上执行 optimize minimize 以便最小化 DataFrame 中的类别和结果列之间的错误 考虑这个例子 import pandas as
  • 通过 python 中的另外两个修改数组[重复]

    这个问题在这里已经有答案了 假设我们有三个一维数组 A 长度为 5 B 长度相同 示例中为5 C 更长 比如长度为 100 C最初用零填充 A给出索引C应更改的元素 它们可能会重复 以及B给出应添加到初始零的值C 例如 如果A 1 3 3
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • 为什么在访问 Python 对象属性时使用 getattr() 而不是 __dict__ ?

    在具有一定程度的 Python 对象自省的源代码示例和 SO 答案中 常见的模式是 getattr some object attribute name string 是否有理由优先选择这种模式 some object dict attri
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • 如何配置 Flask-Cache 无限超时

    在 Flask Cache 文档中 所有示例都使用有限超时 我不想在应用程序运行时刷新缓存 这可能吗 如果可以 我该怎么做 Flask Cache 使用werkzeug contrib cache在幕后 来自文档 http werkzeug
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • Python - Unicode 到 ASCII 的转换

    我无法在不丢失数据的情况下将以下 Unicode 转换为 ASCII u ABRA xc3O JOS xc9 I tried encode and decode他们不会这么做 有人有建议吗 Unicode 字符u xce0 and u xc
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • 从 wxPython 事件处理程序中调用函数

    我正在努力寻找一种在 wxPython 事件处理函数中使用函数的方法 假设我有一个按钮 单击该按钮时 它会使用事件处理程序运行一个名为 OnRun 的函数 但是 用户忘记单击 OnRun 按钮之前的 RadionButton 我想弹出一个
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 如何展平解析树并存储在字符串中以进行进一步的字符串操作 python nltk

    我正在尝试从树结构中获取扁平树 如下所示 我想将整个树放在一个字符串中 就像没有检测到坏树错误一样 S NP SBJ NP DT The JJ high JJ seven day PP IN of NP DT the CD 400 NNS
  • 是否可以使用 Anaconda 包作为 Google Cloud Functions 的依赖项?

    我正在使用 Python 运行时编写 Google Cloud Function 我需要包含一些无法使用的依赖项pip 如文档中所述here https cloud google com functions docs writing spe
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • 基于值的 matplotlib 条形图颜色

    有没有一种方法可以根据条形图的值对条形图的条形进行着色 例如 values below 0 5 red values between 0 5 to 0 green values between 0 to 08 blue etc 我找到了一些

随机推荐

  • vue3调用摄像头,做校验,没有摄像头或者不成功,提示用户

    检查浏览器是否支持getUserMedia方法 if navigator mediaDevices navigator mediaDevices getUserMedia 请求访问相机设备 navigator mediaDevices ge
  • SpringMvc源码分析(二) 请求执行前的准备过程:@Controller/@RequestMapping注解解析为RequestMappingInfo的过程

    在SpringBoot项目中 应用在启动时会扫描项目中的 Controller和 RequestMapping注解 并将其解析为RequestMapping Bean类型的对象供DispatcherServlet调用 本文主要分析这个解析的
  • 前端js的event光标事件实现div方块移动

    方法一 普通做法 div div
  • python入门学习小工具制作系列各种小工具整理

    一 制作基于windows系统批量重命名文件小工具 参考博客 使用python做一个批量重命名文件的小工具 讷言丶的博客 CSDN博客 效果展示 临时01 代码实现 import os from tkinter import filedia
  • 全面了解环保HJ212协议和使用

    1 环保HJ212协议介绍 环保HJ212协议是在环保行业中使用的数据传输协议 数据终端 采集终端 环保仪等终端设备把采集好的数据发送到环保平台使用这个协议 这个协议是环保行业的标准协议 所以实现了各种终端和平台之间的完美对接 只要符合协议
  • 送书 | 《商品期货量化交易实战》

    今天是周三 又到了给大家送书的时刻啦 这次给大家带来的是 商品期货量化交易实战 文末查看送书规则 简介 本书首先讲解量化交易基础和Python编程入门 再讲解量化交易API 然后讲解CTA的趋势跟踪策略和回归策略 并且配合量化交易策略实战案
  • leetcode【2023】

    什么是华为OD机试 华为OD机试是华为的笔试 因为是在电脑上做题 所以称为机试 主要用于评估求职者是否适合所申请的职位 华为OD机试通常涵盖了多个测试领域 如算法构造 编程技巧以及错误修复等 其目标是全面评估求职者的基础知识 实践技能和编程
  • gojs 绘制UML连线图

  • A Survey on Deep Transfer Learning 2018 翻译

    A Survey on Deep Transfer Learning 2018 翻译 o 虽然这篇文章是2018年的 不是很新 但是写的通俗易懂 很适合刚接触迁移学习的同学 所以就翻译了 independent and identicall
  • Python基础知识(七):类、对象与魔法方法

    类与对象 1 对象 属性 方法 对象是类的实例 换句话说 类主要定义对象的结构 然后我们以类为模板创建对象 类不但包含方法定义 而且还包含所有实例共享的数据 封装 信息隐蔽技术 我们可以使用关键字 class 定义 Python 类 关键字
  • CSS3 SVG实现可爱的动物哈士奇和狐狸动画

    点击上方公众号 可快速关注 英文 David Khourshid 译文 码农网 小峰 www codeceo com article css3 svg husky and fox html 今天 我想向大家展示如何巧妙地使用HTML CSS
  • 论"大数据"时代下的海量数据存储技术

    高清 长周期呈现海量存储需求 高清已经在安防行业全面铺开应用 除了带给用户能够看得更清的良好视觉感受外 对存储容量的需求亦成几何式增长 例如 前端IPC有130W到500W像素 码流也从有2Mbps到8Mbps 而一个130W像素 8Mbp
  • 开源OCR引擎Tesseract-OCR

    Overview Tesseract的OCR引擎最先由HP实验室于1985年开始研发 至1995年时已经成为OCR业内最准确的三款识别引擎之一 然而 HP不久便决定放弃OCR业务 Tesseract也从此尘封 数年以后 HP意识到 与其将
  • VSCode 必装的 10 个高效开发插件

    本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件 用于大大提高软件开发的效率 VSCode 的基本使用可以参考我的原创视频教程 VSCode 高效开发必装插件 VSCode Visual Studio Cod
  • jquery val() 获取不到值的问题排查

    表单校验用jquery validation 实现 基本功能很快实现 在测试时发现自定义的一个比较开始结束日期的校验不起作用 var begin param val var reg new RegExp g begin begin repl
  • arcgis 9.3 sde 安装 启动服务问题

    1 arcgis 9 3 注册 服务 命令 sdeservice o create d oracle orcl p sde i esri sde 2 启动 sde 服务 报错 3 以上1命令在机器上执行不认 用以下命令 sdeservice
  • 【DevOps-监控】生产环境是如何落地一套全方位的监控系统

    生产环境监控究竟需什么样的功能 我们试想一下 如果部署一个监控系统到生产环境 需要满足哪些功能呢 既然是监控 肯定需要监控我们的主机资源信息包括cpu 内存 网络 磁盘等信息吧 其次还得监控容器的相关资源信息 然后我们可能还需要历史数据 几
  • uni-app vuex全局计时

    功能需求 在A页面进入时候开始计时中间会去到B页面查看数据 但是并没有销毁当前页面 所以计时一直在 直到在B页面提交数据 才结束计时 在根文件夹创建 store文件夹 同时创建index js文件 import Vue from vue i
  • TensorFlow:实战Google深度学习框架(二)实现简单神经网络

    3 4 TensorFlow实现神经网络 3 4 1 TensorFlow游乐场 3 4 2 前向传播 3 4 3 神经网络参数与TensorFlow变量 变量和张量的关系 变量的三个属性 张量 维度 类型 3 4 4通过TensorFlo
  • flask-sqlalchemy插件使用

    1 Flask SQLAlchemy插件的使用 该插件对SQLAlchemy进行了简单的封装 使得我们可以更加简单的使用 初始化数据库 无需导入create engine from flask import Flask from flask