У меня проблемы с написанием того, что должно быть простым оператором обновления SQL в SQLAlchemy Core. Тем не менее, я не могу найти какую-либо документацию, примеры или учебники, которые показывают, как объединить несколько условий. Я уверен, что это там - просто не могу найти это.
Вот таблица:
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) )
Вот оператор вставки и обновления:
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()
Код прекрасно обрабатывает вставку, но обновляет все строки в таблице. Можете ли вы помочь мне понять синтаксис этого предложения where? Все предложения приветствуются - заранее спасибо.
РЕДАКТИРОВАТЬ: исправленное предложение выглядит следующим образом:
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']))).\
Это очень простой синтаксис, но, учитывая множество уровней SQLAlchemy, было удивительно трудно определить, что именно применяется в этом контексте.