sqlalchemy-如何一次在db中保存多个元组,然后提交

时间:2018-06-26 07:53:05

标签: python flask sqlalchemy flask-sqlalchemy

我有这堂课

class Order(db.Model):
__tablename__ = "orders"

id=db.Column(db.String, primary_key=True)
order_id = db.Column(db.String, nullable=True)
product_id=db.Column(db.String, nullable=True)
quantity=db.Column(db.Integer, nullable=True)


def save_to_db(self):

    db.session.add_all(self)
    db.session.commit()

我有这堂课

class checkout(Resource):
# @jwt_required
def post(self):
    # current_user = get_jwt_identity()

    # user_wallet=Wallet.find_by_customer_id(current_user)
    order_id=uuid.uuid1()

    data = parser_checkout.parse_args()
    print (data['Products'][0]['Product_id'])
    mainlist=list()
    for i in range(0,len(data['Products'])):
        new_order_prod=Order(
            id=uuid.uuid1(),
            order_id=order_id,
            product_id=data['Products'][i]['Product_id'],
            quantity=data['Products'][i]['quantity']


        )

        mainlist.append(new_order_prod)
    try:

        mainlist.save_to_db()
        return {
            'status':'succes',
            'message':'sucess order placed'
        },200
    except:
        return {
            'status':'error',
            'message':'order placing failed'
        },401

我没有收到任何错误,但是我发现mainlist.save_to_db()无法正常工作,这意味着它没有进入该类的功能内。谁能帮我 ? 我认为它没有进入那个函数becoz类对象是具有相关字段的元组,但是我正在制作列表并调用它,所以为什么它不起作用?有什么解决办法吗?

1 个答案:

答案 0 :(得分:1)

您正在调用mainlist.save_to_db(),但是您声明了mainlist = list(),因此它没有save_to_db方法。最重要的是,您有一个except裸露的位置,因此可以避免这样做引起的任何错误。最好只处理特定的异常,或者如果要进行全面的except,则至少要记录异常的含义。

与其在save_to_db类上放置Order方法,这意味着调用它仅影响1个实例,而是直接调用db.session.add_all(mainlist)db.session.commit()