更新订单sqlalchemy

时间:2018-05-15 13:47:02

标签: python mysql sqlalchemy

我需要使用column使用sqlalchemy更新表格中的order_by,它适用于mysql,如下所示:

UPDATE `user` SET `order` = `order`+1 ORDER BY `order` DESC;

但如果我使用sqlalchemy尝试:

session.query(User).order_by(User.order).update({'order': Table.order + 1})

我得到error

  

调用order_by()时无法调用Query.update()或Query.delete()

有没有办法使用sqlalchmey实现它?

编辑: 需要订单,因为列是唯一的

1 个答案:

答案 0 :(得分:0)

您是否尝试在初始化UniqueConstraint时设置param deferrable = True?

from sqlalchemy import UniqueConstraint

class User(Base):
    __tablename__ = 'user'   
    name = Column('name', String, unique=True),
    order = Column('order', Integer),

    UniqueConstraint(                                                                                                                                                              
        'order', name='unikey_order',                                                                                                                    
        deferrable=True                                                                                                                                                            
    ) 
# update directly
db.session.query(User).update({User.order: User.order + 1}, synchronize_session='fetch')