麻烦与PostgreSQL中
问题描述:
插入时了解的情况我有这样的代码:麻烦与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
?但我不明白它是如何工作的。
答
你是问有关蟒蛇结构。
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
。
plpy.execute时是PL/Python的 - https://www.postgresql.org/docs/current/static/plpython-database.html –