当前位置: 首页 > 面试题库 >

如何在SQLAlchemy中增加计数器

章博耘
2023-03-14
问题内容

假设我有一个表tags,该表具有一个字段count,该字段指示items使用给定标记标记了多少个。

添加带有现有标签的新项目后,如何在SQLAlchemy中增加此计数器?

使用普通SQL,我将执行以下操作:

INSERT INTO `items` VALUES (...)
UPDATE `tags` SET count=count+1 WHERE tag_id=5

但是我如何count=count+1用SQLAlchemy表达?


问题答案:

如果您有类似的东西:

mytable = Table('mytable', db.metadata,
    Column('id', db.Integer, primary_key=True),
    Column('counter', db.Integer)
)

您可以像这样增加字段:

m = mytable.query.first()
m.counter = mytable.c.counter + 1

或者,如果您有一些映射的模型,则可以选择编写:

m = Model.query.first()
m.counter = Model.counter + 1

这两个版本都将返回您要求的sql语句。但是,如果您不包括该列并仅编写m.counter += 1,则新值将在Python中计算(并且可能会发生竞争条件)。因此,在此类计数器查询中,请务必包括上面两个示例中所示的列。



 类似资料:
  • 我正在开发一个android应用程序,用户可以阅读博客和文章。我想在我的android应用程序中计算浏览量。我正在使用recyclerView来显示列表项,并通过使用名为getArticles.php的API成功地实现了这一点,它通过单击列表项来显示来自webservices的JSON数据。我有另一个名为incrementViews.php的API,params是{article_id=3},它将

  • 我们使用apollo java客户端来使用graphQL服务,该服务在内部使用okhttp(3.12.11) 我们使用apollo客户端和okhttpclient的单例实例 我们面临的问题是上面的代码在多线程环境中运行,在可视化VM中,我可以看到okhttp只执行5个并行请求 我们没有使用aysnc功能。我们尝试了下面提到的方法,但没有一种有效 有人能告诉我如何提高okhttp中并行请求的限制吗?

  • 问题内容: 我想在每次迭代中将的值增加。轻松实现。变量是的数组。 这是我的。 为了练习Stream,我尝试将其重写为: 导致我的错误: 错误:从lambda表达式引用的局部变量必须是final或有效的final 如何重写要在其中使用的递增变量? 问题答案: 你不应该 两者看起来很相似,但是在概念上是不同的。循环只是一个循环,但是一条指令指示库对每个元素执行操作, 而不指定操作顺序(对于并行流)或

  • 问题内容: 我有一个正在处理的查询,我想增加一个字段并在键值不同时重新启动计数器。 我知道这段代码行不通。以编程方式,这就是我想要的… …最终结果看起来像这样: 是的,我坚持使用SQL2k。否则,该row_number()将起作用。 问题答案: 假设一个表: 在Microsoft SQL Server 2000中获得此权限的一种方法是使用子查询对具有相同ID和较低顺序的行进行计数。 提示: 现在是

  • 问题内容: 这是我的mysql查询 我想沿着边名选择一个增量计数器。所以预期的输出将是 问题答案: 这部分: 使得可以引入变量而无需单独的查询。因此,第一个查询也可以分为以下两个查询: 例如在存储过程中使用时。