为什么我的Python脚本将Postgres表的所有行设置为相同的值?

问题描述 投票:0回答:1

我有一个Python3脚本,它检查存储在数据库中的URL的有效性,并根据结果在终端窗口中打印“TRUE”或“FALSE”。

我正在尝试更改它以将结果上传到同一个表中,但是目前它只是将列中的所有行(url_valid类型BOOL)设置为“TRUE”,这与终端中打印的结果是正确的不同。

我认为这是因为我的SQL查询中没有包含“where”子句,但那是因为我不确定如何从SQL调用Python脚本的输出。

其他可能性包括我的“cursor.execute(”或commit语句,但我不确定。

这是我的代码片段:

dbconn = create_engine('postgresql+psycopg2://' + user + ':' + password + '@' + host + ':' + str(port) + '/' + database , echo=False)
dbconnraw = dbconn.raw_connection()
cur = dbconnraw.cursor()
cur.execute('SELECT email_domain_url FROM contacts_unlisted_umatch')
rows = cur.fetchall()

for row in rows:
    try:
        response = requests.get(row[0])
        urlstat = response.status_code
        if urlstat<400:
            print('TRUE')
            cur.execute("UPDATE contacts_unlisted_umatch SET url_valid = 'TRUE'")
            dbconnraw.commit()
        else:
            print('FALSE')
            cur.execute("UPDATE contacts_unlisted_umatch SET url_valid = 'FALSE'")
            dbconnraw.commit()
    except Exception:
        print('FALSE')
        cur.execute("UPDATE contacts_unlisted_umatch SET url_valid = 'FALSE'")
        dbconnraw.commit()
        pass

我可以更改什么来更新每个行的值而不是将它们全部设置为“TRUE”?

python postgresql
1个回答
2
投票

在SQL语句中添加“WHERE”子句。如果没有“WHERE”子句,则告诉它更新表中的每一行。

例如,“UPDATE contacts_unlisted_umatch SET url_valid ='TRUE'where email_domain_url = ...”,这将只更新“email_domain_url”的url_valid值。

© www.soinside.com 2019 - 2024. All rights reserved.