21b*_*1bn 0 python flask flask-sqlalchemy
我正在使用flask-restful 这是我要插入的课程
class OrderHistoryResource(Resource):
model = OrderHistoryModel
schema = OrderHistorySchema
order = OrderModel
product = ProductModel
def post(self):
value = req.get_json()
data = cls.schema(many=True).load(value)
data.insert()
Run Code Online (Sandbox Code Playgroud)
在我的模型中
def insert(self):
db.session.add(self)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
模式
from config.ma import ma
from model.orderhistory import OrderHistoryModel
class OrderHistorySchema(ma.ModelSchema):
class Meta:
model = OrderHistoryModel
include_fk = True
Run Code Online (Sandbox Code Playgroud)
我要插入的示例数据
[
{
"quantity":99,
"flaskSaleStatus":true,
"orderId":"ORDER_64a79028d1704406b6bb83b84ad8c02a_1568776516",
"proId":"PROD_9_1568779885_64a79028d1704406b6bb83b84ad8c02a"
},
{
"quantity":89,
"flaskSaleStatus":true,
"orderId":"ORDER_64a79028d1704406b6bb83b84ad8c02a_1568776516",
"proId":"PROD_9_1568779885_64a79028d1704406b6bb83b84ad8c02a"
}
]
Run Code Online (Sandbox Code Playgroud)
这是我在插入方法开始后得到的
TypeError: insert() takes exactly 2 arguments (0 given)
Run Code Online (Sandbox Code Playgroud)
或者有另一种方法来做这个动作?
编辑 - 发布的 marshmallow-sqlalchemy 直接加载到实例
您需要遍历OrderModel列表中的实例。
然后您可以使用add_all将OrderModel对象添加到会话,然后批量更新 - 请参阅文档
应该是这样的:
db.session.add_all(data)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
请参阅这篇文章,简要讨论为什么add_all当您拥有复杂的 ORM 关系时最好。
另外 - 不确定您是否需要将所有模型/模式都作为类变量,可以将它们导入(或仅存在于同一个文件中,只要它们在资源类之前声明)。