我正在创建一个功能请求 Web 应用程序,其中使用 SQL 来处理功能请求。 这就是我的 table 的样子。
我有“id、标题、描述、客户、clientPriority、日期等。
假设“客户端 1”请求某些功能并将 clientPriority 设置为“1”。然后他们第二天回来请求另一个功能并希望将优先级设置为“1”。因此,优先级“1”所请求的第一个功能应下推至“2”。用sql可以实现这个功能吗?如果是这样,我怎样才能用sql表来完成这个?
我正在使用 Python sqlAlchemy。
最佳答案
那么您必须在一个事务中运行 2 个查询。
首先它要移动优先级 @priority
是您要插入的内容(可以是 1 或任何值)。以下假设您想要移动整个堆栈。这是有道理的。如果要移动一个,修改为“=”。
BEGIN TRANSACTION
UPDATE tableName
SET ClientPriority = ClientPriority + 1
WHERE ClientPriority >= @priority
INSERT INTO tableName (feature, priority)
VALUES @feature, @priority
COMMIT TRANSACTION
在炼金术中,它是相同的,只是流利 session =交易,所以一旦你打开它就很好了。 http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html
tablename.update().where(ClientPriority>=@priority). values(ClientPriority=ClientPriority+1)
tablename.insert.values(feature=@feature, ClientPriority=@priority)
添加触发器作为 Neel Patel 评论的最终解决方案:
@event.listens_for(RequestedFeatures, 'before_insert') def receive_before_insert(mapper, connection, target): query = "UPDATE features SET clientPriority = (clientPriority + 1) WHERE client = '" query += target.client + "' AND clientPriority >= " + str(target.clientPriority) qr = session.execute(query) session.commit()
关于python - 如何根据插入的内容确定 SQL 列值的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36680516/