Flask Sqlalchemy 添加多行

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)

或者有另一种方法来做这个动作?

ele*_*bie 5

编辑 - 发布的 marshmallow-sqlalchemy 直接加载到实例

您需要遍历OrderModel列表中的实例。

然后您可以使用add_allOrderModel对象添加到会话,然后批量更新 - 请参阅文档

应该是这样的:

db.session.add_all(data)
db.session.commit() 
Run Code Online (Sandbox Code Playgroud)

请参阅这篇文章,简要讨论为什么add_all当您拥有复杂的 ORM 关系时最好。

另外 - 不确定您是否需要将所有模型/模式都作为类变量,可以将它们导入(或仅存在于同一个文件中,只要它们在资源类之前声明)。