You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python if语句中使用PostgreSQL布尔值作为参数

解决PostgreSQL查询布尔值在Python中判断的问题

问题根源

你用fetchall()得到的[(True,)]是包含单个元组的列表,元组的第一个元素才是你要的布尔值is_draft。之前直接拿整个列表或字符串去和True比较,自然匹配不上。

优化方案(推荐)

改用fetchone()直接获取单行数据,同时修复SQL注入风险(不要用字符串拼接SQL):

cur = conn.cursor()
# 用参数化查询,%s是psycopg2的占位符,item_id会被安全转义
cur.execute("SELECT is_draft FROM item_pool WHERE item_id = %s", (item_id,))
# 提取元组中的布尔值
is_draft = cur.fetchone()[0]
conn.close()
return is_draft

之后直接用if is_draft:就能正常判断:

result = your_function(item_id)
if result:
    print("是草稿状态")
else:
    print("非草稿状态")

如果你坚持用fetchall()

需要先判断列表非空,再提取元组内的布尔值:

cur = conn.cursor()
cur.execute("SELECT is_draft FROM item_pool WHERE item_id = %s", (item_id,))
list_of_tuples = cur.fetchall()
conn.close()

# 处理结果
if list_of_tuples:  # 确保有查询结果
    is_draft = list_of_tuples[0][0]
    if is_draft:
        # 执行你的逻辑
        pass

关键提醒

绝对不要用字符串拼接的方式构造SQL语句(比如"WHERE item_id = " + str(item_id)),这会导致严重的SQL注入漏洞,恶意用户可以通过构造特殊的item_id删除你的数据库表或窃取数据。

内容的提问来源于stack exchange,提问作者Ray Babich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:15:35