python - 如果我将 db 连接存储在 flask.g 对象上,如何让 Flask 连接到我的测试数据库?
问题描述
我有一个直接使用 pymysql 的 Flask 应用程序,没有 SQLAlchemy。
在我的 db.py 文件中,我有以下内容:
from myns.my_db import db_connect
def has_db():
return hasattr(flask.g, 'db')
def get_db(name):
if not has_db():
setattr(flask.g, 'db', db_connect())
return getattr(flask.g, 'db')
以及我的主要 app.py 中的这个:
@app.teardown_request
def close_db(ex):
if has_db():
conn = get_db()
conn.close()
我想要做的是在测试中“模拟”数据库,使用这里的例子:https ://flask.palletsprojects.com/en/1.1.x/testing/#faking-resources-and-context
我在运行测试时遇到的错误是:
pymysql.err.InterfaceError: (0, '')
我以前用pymysql遇到过。我通常将此错误解释为有多个线程使用数据库游标,或者在多个模块中使用了全局数据库游标。这似乎是有道理的,因为我相信该flask.g
对象是某种 thred-local 全局对象。
有没有办法在我的测试中“模拟”数据库连接,即使它涉及重新构建我的 Flask 应用程序?谢谢!
解决方案
问题是我有一个 self.db 连接,我试图用来:
- 设置数据库并安装架构
- 运行测试
- 并且还拆除了数据库
一旦我分离了这些步骤并为步骤 1、2 和 3 使用了新的连接,我就不再遇到问题了。
推荐阅读
- amazon-web-services - 无法从 ECS 集群中运行的容器实例上的 Amazon ECS 私有存储库中提取映像
- python - 可以在没有 **any** 默认环境的情况下安装 Anaconda 吗?
- javascript -
- android - 如何设计折叠工具栏
- python - Numpy fancy indexing with tuples
- fortran - 将 4 维数组减少到 2 个 Fortran
- variables - 在 PDO 查询中将变量设置为列的值
- python-3.x - PermissionError: [Errno 13] Permission denied: 'Pipfile' IBM Hyperledger Indy
- bash - 如何将 bash 转换为 sh
- python - 在运行时更新 celery conf