flask框架-Flask-SQLAlchemy
####
####
简单使用,代码示例
from flask import Flask, request from flask_restful import Resource, Api from flask_sqlalchemy import SQLAlchemy import json app = Flask(__name__) # api 和 app 要关联在一起 api = Api(app) # 连接mysql数据库 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:Ji10201749@localhost:3306/flask_test?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) class TestCase(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=False, nullable=False) desc = db.Column(db.String(120), unique=False, nullable=False) steps = db.Column(db.String(120), unique=False, nullable=False) def __repr__(self): return '<TestCase %r>' % self.name def model_to_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} # 类要继承resource class TestCaseSearch(Resource): def get(self): print(request.args) id = request.args.get("id") if id: return TestCase.query.filter_by(id=id).first().model_to_dict() return [item.model_to_dict() for item in TestCase.query.all()] def post(self): print(request.json) data_dict = request.json data_dict["steps"] = json.dumps(data_dict["steps"]) print(data_dict) testcase = TestCase(**data_dict) db.session.add(testcase) db.session.commit() return { "msg": "success" } # 注册到api里面去 api.add_resource(TestCaseSearch, '/testcase') if __name__ == '__main__': db.create_all() app.run(debug=True, use_reloader=True)
###
1,flask,使用flask-sqlalchemy连接mysql数据库
2,使用flask-sqlalchemy创建表,
3,使用flask-sqlalchemy查询数据,单条和多条
4,使用flask-sqlalchemy查询数据,新增数据
5,把查询的数据json序列化,
###
###
用来发起post请求的代码:
import requests url = "http://127.0.0.1:5000/testcase" data = {"name": "test", "desc": "1234", "steps": ['1', '2', '3']} result = requests.post(url, json=data) print(result.text)
####
后续的新建表,一对多关联,多对多关联,等等后面在学
还有复杂的查询,都是后面在学,
现在先开一个头,
#####
是否一定要使用orm?
群众都是用ORM的,你目前觉得raw sql写的更舒服是因为你没面临需求不断变更,上线压力大的情况。
试想下raw sql这样的有几个问题
1)移植很困难,让你把数据库从mysql迁移到Oracle,给你一天时间,60个表要改,你怎么办
2)转义很难处理
3)基本没法做cache
4)可读性
所以更好的方案是用ORM,有性能非常瓶颈的时候再有针对性优化
--
所以小项目,根本不需要使用orm,
个人经验,每一个立志简洁不用orm的项目,随着业务复杂度提高,最后都发展出自己的一套残缺版orm
大的项目还是推荐ORM。如果你裸写SQL,随着业务和人员的增加你也会试着封装与DB连接的模块,那么恭喜你,你自己写了一个ORM。
###
一开始决定不用ORM的,最终都被逼得自己重新造了个蹩脚的ORM轮子;
一开始决定使用ORM的,最终都被逼得绕开ORM自己挽起袖子裸写SQL。
药丸!
##
可以集成orm,最好是查询使用裸sql,orm负责增删改,orm的特性也不要用太多(比如主外键关联啥的最好不用),这样达到简洁而又不用编写大量的sql,代码看上去更可读
使用 ORM 的好处:
1. 避免裸写 SQL 语句,一个是看起来简洁,另一个是借助 ORM 框架防止 SQL 注入
2. 将 Data 抽象为 Object,由此可以融入现有的 OO 编程方法
缺点:
1. 据说 ORM 性能不行不过以我自身的姿势水平,还没到考虑 ORM 对性能消耗的地步,另外从周围前辈们的经验来看,基本也都推荐使用 ORM 作为最佳实践
###
这个其实挺复杂。就像Python到底要不要异步一样;
小项目简单脚本上ORM会费事,所以并不建议。
大一点的项目或者变化较快的项目ORM是一个好东西,可以让开发更加高效。
再大一些,需要考虑性能时,手写SQL是必须的,尤其是某些场景ORM会带来额外性能消耗,这时一般数据结构变化可能性小了很多,手写SQL会带来一些性能优化,可以考虑。
####
所以,大点项目要用orm,
1,可以提升开发效率,
2,可以避免一些安全问题,裸sql,可能会有安全问题,
而复杂的sql,还不如手写,使用orm太麻烦了,
####
相关文章
- 框架节构设计(高内聚低耦合)
- 第二百七十二节,Tornado框架-iframe标签框架伪造ajax
- flask框架-框架快速入门
- SAP UI5 框架是如何执行 batch 请求的单步调试
- One order search的框架代码里,硬编码了要去取Interaction object相关的数据
- 3588 Rockchip_基于 DRM 框架的 HDMI 开发指南
- Python Flask框架学习11:Flask Request对象
- Python Flask框架学习03:Flask 环境
- pytest接口自动化测试框架 | 执行失败跳转pdb
- 深入浅出Flask(49):flask_sqlalchemy的创建一对多的关系表
- 深入浅出Flask(35): H-ui前端框架的广告效果
- 深入浅出Flask(24): H-ui前端框架的按钮组件
- Flask 框架:运用WTForms实现用户注册
- Flask框架:运用Axios库实现前后端交互
- Python地图可视化框架pygal.maps.world/和pyecharts