python - 优化 REST API (python + sqlite3)
问题描述
有关如何优化此代码的任何建议?它适用于 REST API,但速度很慢。
id = str(request.form['id'])
client = str(request.form['client'])
translationID = str(request.form['translationID'])
if os.path.isdir(id):
conn = sqlite3.connect(db)
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS foo (v1 TEXT, v2 TEXT, UNIQUE (v1) ON CONFLICT REPLACE )''')
for row in c.execute('SELECT * FROM foo WHERE v1=?', [st]):
if(st == row[0]):
return row[1], 200
return "", 404
解决方案
如果您可以在服务器启动时检查它,而不是检查每个请求中是否存在表,它会更好。
其次,如果您正在开发一个成熟的应用程序,我强烈建议您为此使用 ORM 包。我曾在一个带有原始查询的烧瓶项目中工作,管理、验证、维护、更新、测试和保护您的代码成为一项繁琐的任务。它也缺乏可重用性。
如果您不熟悉烧瓶,以下软件包会有所帮助:
- SQLAlchemy:烧瓶的 ORM ( https://www.sqlalchemy.org/ )
- Flask SQLAlchemy:支持 SQLAlchemy 的 Flask 扩展(https://flask-sqlalchemy.palletsprojects.com/en/2.x/)
- Flask Migrate:用于轻松管理数据库迁移的软件包(https://flask-migrate.readthedocs.io/en/latest/)
- Flask Marshmallow:用于轻松序列化和反序列化对象(https://flask-marshmallow.readthedocs.io/en/latest/)
最重要的是,您应该至少阅读本教程一次https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
推荐阅读
- java - 如何一次使用 5 个登录来执行登录功能的负载测试
- android - Android 架构组件:如何取消改造请求?
- javascript - Webpack 4 文件加载器适用于字体文件,但不适用于图像文件
- php - PHP Symfony 没有搜索结果
- windows - CreateFile 返回的所需权限未保留
- mysql - 从两个不同的表中收集数据,Sql
- shell - 如何在 shell 脚本中执行 ccm cqlsh 命令,如 INSERT、CREATE 和 SEELCT?
- django - Wagtail 网站无法使用 DigitalOcean Spaces 加载媒体文件
- css - 设置宽度时 Flex 无法正确对齐
- javascript - 在 ionic 3 中提交后未显示评论