Tengo dificultades para escribir lo que debería ser una simple declaración de actualización SQL en SQLAlchemy Core. Sin embargo, no puedo encontrar documentación, ejemplos o tutoriales que muestren cómo combinar múltiples condiciones. Estoy seguro de que está ahí, simplemente no puedo encontrarlo.SQLAlchemy: Expresión de SQL con múltiples condiciones
Aquí está la tabla:
self.struct = Table('struct',
metadata,
Column('schema_name', String(40), nullable=False,
primary_key=True),
Column('struct_name', String(40), nullable=False,
primary_key=True),
Column('field_type', String(10), nullable=True),
Column('field_len', Integer, nullable=True))
Aquí está la declaración de inserción & actualización:
def struct_put(self, **kv):
try:
i = self.struct.insert()
result = i.execute(**kv)
except exc.IntegrityError: # row already exists - update it:
u = self.struct.update().\
where((self.struct.c.struct_name==kv['struct_name']
and self.struct.c.schema_name==kv['schema_name'])).\
values(field_len=kv['field_len'],
field_type=kv['field_type'])
result = u.execute()
El código controla la multa de inserción, pero las actualizaciones de todas las filas de la tabla. ¿Me puede ayudar a comprender la sintaxis de esta cláusula where? Todas las sugerencias son bienvenidas, gracias de antemano.
EDIT: La cláusula corregido es el siguiente:
where((and_(self.struct.c.parent_struct_name==kv['parent_struct_name'],
self.struct.c.struct_name==kv['struct_name'],
self.struct.c.schema_name==kv['schema_name']))).\
Es una sintaxis muy sencilla, pero teniendo en cuenta las muchas capas de SQLAlchemy fue sorprendentemente difícil determinar exactamente lo que se aplica en este contexto.
Un atajo para usar and_() es encadenar varias cláusulas where() Así: .where (a == 1) .where (b == 2) .where (c == 3). Ver [ documentos] (http: //docs.sq lalchemy.org/en/rel_1_0/core/tutorial.html#conjunctions). – Arie