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

标签 python postgresql

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

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

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

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

这是我的代码片段:

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”?

最佳答案

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

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

关于python - 为什么我的 Python 脚本将我的 Postgres 表的所有行设置为相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54603026/

相关文章:

python - 如何使用 pandas python3 从 CSV 的中间名列中获取中间名首字母并写入新的 CSV

python - 是否有内置包将 html 解析为 dom?

sql - 从 SQL 中的字符串中选择不同的最高级别目录

postgresql - PostgreSQL 中数据类型的大写/小写是否有最佳实践

sql - array_agg 包含另一个 array_agg

php - 如何使用 Laravel 的查询生成器在 JOIN 查询中生成 USING 子句?

python - 如何通过 pandas 中的 groupby 输出来填充 na?

php - 弹出动态通知

python - Django Postgres 内存泄漏

ruby-on-rails - 查找具有关系记录的记录失败:PG::UndefinedTable: ERROR: missing FROM-clause entry for table