2017-03-07 91 views
0

插入時瞭解的情況我有這樣的代碼:麻煩與PostgreSQL中

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

我不知道我understad的值是如何插入到列timeo

代碼0 if not temp_timeo else temp_timeo是可以理解的但那麼我們有另一個條件if producttypeid==1 else 0,我不知道它是如何覆蓋以前的值?

我從來沒有見過這樣的SQL查詢編碼之前的。

Specificly在這個例子:

temp_warehouseid = 1 
temp_timeo = 2 
producttypeid =5 

此插入一個值(1,0)行我想這是因爲producttypeid=5?但我不明白它是如何工作的。

+0

plpy.execute時是PL/Python的 - https://www.postgresql.org/docs/current/static/plpython-database.html –

回答

1

你是問有關蟒蛇結構。

tmp = VALUE1 if CONDITION else VALUE2 

如果CONDITION爲真,則VALUE1與tmp對齊。如果它是錯誤的,則VALUE2被賦值。

在您的查詢的情況下,使用這條巨蟒結構兩次。

timeo = VALUE1 if CONDITION1 else VALUE2 if CONDITION2 else VALUE3 

如果CONDITION1爲真,則選擇value1。如果爲假,則評估第二個「聲明」VALUE2 if CONDITION2 else VALUE3

所以,作爲temp_timeo = 2,條件not temp_timeo是假的。 而作爲producttypeid = 5,條件producttypeid==1是假的。 因此選擇上一個值0