为什么我的Python脚本将Postgres表的所有行设置为相同的值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的Python脚本将Postgres表的所有行设置为相同的值?相关的知识,希望对你有一定的参考价值。
我有一个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”?
答案
在SQL语句中添加“WHERE”子句。如果没有“WHERE”子句,则告诉它更新表中的每一行。
例如,“UPDATE contacts_unlisted_umatch SET url_valid ='TRUE'where email_domain_url = ...”,这将只更新“email_domain_url”的url_valid值。
以上是关于为什么我的Python脚本将Postgres表的所有行设置为相同的值?的主要内容,如果未能解决你的问题,请参考以下文章