bod*_*ydo 33 python sqlalchemy
假设我有一个表tags
,其中有一个字段count
,表示items
已使用给定标签标记了多少.
在使用现有标记添加新项目后,如何在SQLAlchemy中增加此计数器?
使用纯SQL我会执行以下操作:
INSERT INTO `items` VALUES (...)
UPDATE `tags` SET count=count+1 WHERE tag_id=5
Run Code Online (Sandbox Code Playgroud)
但是我如何count=count+1
在SQLAlchemy中表达?
谢谢,Boda Cydo.
tux*_*21b 54
如果你有类似的东西:
mytable = Table('mytable', db.metadata,
Column('id', db.Integer, primary_key=True),
Column('counter', db.Integer)
)
Run Code Online (Sandbox Code Playgroud)
你可以增加这样的字段:
m = mytable.query.first()
m.counter = mytable.c.counter + 1
Run Code Online (Sandbox Code Playgroud)
或者,如果您有一些映射模型,您可以选择:
m = Model.query.first()
m.counter = Model.counter + 1
Run Code Online (Sandbox Code Playgroud)
两个版本都将返回您要求的sql语句.但是如果你不包括该列并且只是写m.counter += 1
,那么新值将在Python中计算(并且可能发生竞争条件).因此,总是在此类计数器查询中包含上面两个示例中所示的列.
此致,
Christoph
Ant*_*sma 30
如果您使用的是SQL层,则可以在update语句中使用任意SQL表达式:
conn.execute(tags.update(tags.c.tag_id == 5).values(count=tags.c.count + 1))
Run Code Online (Sandbox Code Playgroud)
ORM Query对象还有一个更新方法:
session.query(Tag).filter_by(tag_id=5).update({'count': Tag.count + 1})
Run Code Online (Sandbox Code Playgroud)
ORM版本非常智能,如果它在会话中,也会更新对象本身的count属性.
归档时间: |
|
查看次数: |
18067 次 |
最近记录: |