were tables quick query one not multiple how guide found for create sqlalchemy

tables - sqlalchemy multiple rows were found for one()



Cómo aumentar un contador en SQLAlchemy (2)

Si está utilizando la capa SQL, puede usar expresiones SQL arbitrarias en la declaración de actualización:

conn.execute(tags.update(tags.c.tag_id == 5).values(count=tags.c.count + 1))

El objeto ORM Query también tiene un método de actualización:

session.query(Tag).filter_by(tag_id=5).update({''count'': Tag.count + 1})

La versión de ORM es lo suficientemente inteligente como para actualizar el atributo de conteo en el objeto en sí mismo si está en la sesión.

Supongamos que tengo tags tabla que tienen un count campos que indica cuántos items se han etiquetado con la etiqueta dada.

¿Cómo puedo aumentar este contador en SQLAlchemy después de agregar un nuevo elemento con una etiqueta existente?

Con SQL plano haría lo siguiente:

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

¿Pero cómo expreso count=count+1 en SQLAlchemy?

Gracias, Boda Cydo.


Si tienes algo como:

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

Puedes incrementar campos como este:

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

O, si tiene algunos modelos asignados, puede escribir alternativamente:

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

Ambas versiones devolverán la declaración de SQL que ha solicitado. Pero si no incluye la columna y simplemente escribe m.counter += 1 , entonces el nuevo valor se calcularía en Python (y es probable que ocurran las condiciones de la raza). Por lo tanto, siempre incluya una columna como se muestra en los dos ejemplos anteriores en tales consultas de contador.

Saludos,
Christoph