我很难在sqlacalchemy core中编写一个简单的SQL更新语句。但是,我找不到任何文档、示例或教程来演示如何组合多个where条件。我肯定在那儿-就是找不到。
这是桌子:

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) )

这是insert&update语句:
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的许多层,很难确定在这个上下文中到底应用了什么。

最佳答案

在我看来,您使用的是python“和”操作,它只计算出它周围的一个子句。您应该尝试使用sqlacalchemy中的“and_u”函数。把这两个子句放在“and”函数中。

关于python - SQLAlchemy:具有多个where条件的SQL表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9091668/

10-10 16:47