python - 烧瓶测试数据库未在提交时保存
问题描述
我有以下烧瓶工厂目录设置:
server/
__init__.py
.env
wsgi.py
app/
__init__.py
config/
__init__.py
config.py
test_config.py
models/
__init__.py
sku.py
views/
__init__.py
sku_bp.py
tests/
__init__.py
test_sku_view.py
该create_app
方法定义在server/app/__init__.py
:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app(config):
app = Flask(__name__, instance_relative_config=False)
app.config.from_object(config)
db.init_app(app)
with app.app_context()
from app.views.sku_bp import sku_bp
app.register_blueprint(sku_bp, url_prefix='/api/sku/')
return app
模型 ( server/app/models/sku.py
) 和蓝图 ( server/app/views/sku_bp.py
) 由下式给出:
from app import db
class SKU(db.Model):
__tablename__ = 'sku'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
def to_dict(self):
return {'id': self.id, 'name': self.name}
和
from flask import Blueprint, jsonify
from app.models.sku import SKU
sku_bp = Blueprint('sku_bp', __name__)
@sku_bp.route('/get/')
@sku_bp.route('/get/<string:sku_name>')
def get(sku_name: str):
try:
sku = SKU.query.filter_by(name=sku_name).first()
except Exception as e:
return jsonify({'Error': f'{e}'}), 404
else:
return jsonify(sku.to_dict()), 200
分别。
我正在尝试server/tests/test_sku_view.py
按如下方式计算单元测试:
import unittest
import sys
sys.path.append('./')
from flask_testing import TestCase
import pandas as pd
from app.models.sku import SKU
from app.config.test_config import TestConfig
from app import create_app, db
class TestSKUView(TestConfig, TestCase):
def create_app(self):
return create_app(TestConfig)
def setUp(self):
db.create_all()
df_sku = pd.read_csv('tests/io/test.sku.csv')
for index, row in df_sku.iterrows():
sku = SKU(**row)
db.session.commit()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_sku_view(self):
skus = SKU.query.all()
print(f'skus = {skus}')
def main():
unittest.main()
if __name__ == '__main__':
main()
server/tests/io/test.sku.csv
文件如下所示:
id,name
1,'A'
2,'B'
server/app/config/test_config.py
文件如下所示:
class TestConfig():
DEBUG = True
TESTING = True
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True
SQLALCHEMY_DATABASE_URI = 'sqlite:////tmp/test.db'
我在server/
目录中使用python3.7 tests/test_sku_view.py
. 但是,当我打印skus
查询数据库的列表时,没有返回任何内容,即skus = []
。请问我哪里错了?我知道sku
正在正确生成,但它似乎没有在提交时保存在数据库中......
解决方案
您需要db.session.add(sku)
在提交之前添加 a ,显然是在 for 循环中:-)
推荐阅读
- c# - 如何在 UWP 项目中捕获我所在位置的经度和纬度?
- mysql - 如何在MySQL中电话代码的列值前面添加“00”或“+”符号
- html - HTML/CSS 报告 - RTL 语言
- javascript - 错误:[$injector:unpr] 未知提供者:dataProvider <- data
- c++ - 初始化程序无法确定 C++ 中字符串的大小
- python - Python 和 Pexpect -- Pxssh 已安装但不可用
- libjpeg - 'jpeg_mem_src':找不到标识符
- python - Python 'For' 循环迭代数组
- php - Codeigniter 和数据表搜索过滤列问题
- android - React Native App - 开发服务器返回响应错误代码:500