[英]Comparison to update table in PostgreSQL with psycopg2 doesn't work
我想使用 Python 的 psycopg2 更新 PostgreSQL 中的表。 对于每一行,我想比较 steine > 4 以及 boden 是否等于 Ss、Su、Tt 或 Leer,通过将 weienauschluss = True 设置为 False,从而将这些列从我的以下计算中排除。
但是,只有 steine 的比较有效,而 boden 的比较无效。 比较有问题吗? 我尝试以各种方式设置它,但它们似乎都不起作用。
steine 的数据类型是整数,boden 的数据类型是字符串。
这是我的代码:
import psycopg2
conn = psycopg2.connect(*****)
cur = conn.cursor()
sql = "select min(id), max(id) from bsd_horizonte_test;"
cur.execute(sql)
gidsextent = cur.fetchall()
minimum = gidsextent[0][0]
maximum = gidsextent[0][1]
for gid in range(minimum,maximum+1):
weizenausschluss = False
sql = "select grobbod_k, boart from bsd_horizonte_test where id = " + str(gid) + ";"
cur.execute(sql)
data = cur.fetchall()
if len(data) > 0:
steine = data[0][0]
boden = data[0][1]
if steine > 4:
weizenausschluss = True
if boden == "Ss" or boden == "Su" or boden == "Tt" or boden == "Leer":
weizenausschluss = True
if weizenausschluss == False:
sql = "update bsd_horizonte_test set weizen_ok = True where id = " + str(gid) + ";"
cur.execute(sql)
conn.commit()
else:
sql = "update bsd_horizonte_test set weizen_ok = False where id = " + str(gid) + ";"
cur.execute(sql)
conn.commit()
print(gid)
#Close communication with the database
conn.commit()
cur.close()
conn.close()
谢谢!
为什么不让 Postgresql 在单个查询中完成这项工作? 只需cur.execute
这个查询,它就会完成这一切。
update bsd_horizonte_test
set weizen_ok = not (steine > 4 or boden in ('Su', 'Tt', 'Leer'))
-- where id between (select min(id) from bsd_horizonte_test) and (select max(id) from bsd_horizonte_test)
;
顺便说一句,为什么要循环所有值 b/w min(id) 和 max(id)? 这些是id
所有可能值,因此您可以安全地注释第三个查询行。 我写它只是为了在字面上等同于你的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.