在postgreSQL中插入时理解条件有困难

时间:2017-03-07 07:55:23

标签: python postgresql ternary-operator

我有这段代码:

temp3=plpy.execute("""insert into tabl(warehouseid, timeo)  
values(%s,%s) returning tablid"""% 
(temp_warehouseid, 0 if not temp_timeo else temp_timeo  if producttypeid==1 else 0))

我不确定我是否记下了如何将值插入到列timeo

代码0 if not temp_timeo else temp_timeo是可以理解的,但我们还有另一个条件if producttypeid==1 else 0,我不确定它是如何覆盖以前的值?

我之前从未在SQL查询中看到过这种编码。

具体在这个例子中:

temp_warehouseid = 1
temp_timeo = 2
producttypeid =5

这会插入值(1,0)的行我假设这是因为producttypeid=5?但我不明白它是如何运作的。

1 个答案:

答案 0 :(得分:1)

你问的是python结构。

tmp = VALUE1 if CONDITION else VALUE2

如果CONDITION为真,则VALUE1与tmp对齐。如果为假,则VALUE2为对齐。

如果你的查询使用了两次这个python结构。

timeo = VALUE1 if CONDITION1 else VALUE2 if CONDITION2 else VALUE3

如果CONDITION1为true,则选择value1。如果为false,则评估第二个“语句”VALUE2 if CONDITION2 else VALUE3

因此,作为temp_timeo = 2,条件not temp_timeo为false。 而producttypeid = 5,条件producttypeid==1为假。 因此,选择了最后一个值0