八月 14, 2023
摘要:在本教程中,您将学习如何通过 Python 程序更新 PostgreSQL 表中的数据。
目录
使用 psycopg2 更新 PostgreSQL 表数据的步骤
更新数据的步骤与将数据插入 PostgreSQL 表的步骤类似。
首先,通过调用psycopg
模块的connect()
函数连接到 PostgreSQL 数据库服务器。
conn = psycopg2.connect(dns)
该connect()
方法会返回一个新的connection
对象。
接下来,通过调用该connection
对象的cursor()
方法来创建一个新的cursor
对象。
cur = conn.cursor()
然后,通过调用cursor
对象的execute()
方法使用输入值执行 UPDATE 语句。
cur.execute(update_sql, (value1,value2))
该execute()
方法接受两个参数。第一个参数是要执行的 SQL 语句,在本例中是UPDATE
语句。第二个参数是要传递给UPDATE
语句的输入值列表。
如果想获取该UPDATE
语句影响的行数,可以在调用该execute()
方法后,从cursor
对象的rowcount
属性中获取。
之后,通过调用连接对象的commit()
方法将更改永久保存到数据库中。
conn.commit()
最后,通过调用游标和连接对象的close()
方法,关闭与 PostgreSQL 数据库服务器的通信。
cur.close()
conn.close()
更新数据示例
为了演示,我们将使用在创建表教程中创建的suppliers
数据库中的vendors
表。
假设供应商更改了名称,我们想要更新vendors
表中的更改。为此,我们开发了根据供应商 ID 更新供应商名称的update_vendor()
函数:
#!/usr/bin/python
import psycopg2
from config import config
def update_vendor(vendor_id, vendor_name):
""" update vendor name based on the vendor id """
sql = """ UPDATE vendors
SET vendor_name = %s
WHERE vendor_id = %s"""
conn = None
updated_rows = 0
try:
# read database configuration
params = config()
# connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# create a new cursor
cur = conn.cursor()
# execute the UPDATE statement
cur.execute(sql, (vendor_name, vendor_id))
# get the number of updated rows
updated_rows = cur.rowcount
# Commit the changes to the database
conn.commit()
# Close communication with the PostgreSQL database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
return updated_rows
if __name__ == '__main__':
# Update vendor id 1
update_vendor(1, "3M Corp")
首先,使用 psql 登录 PostgreSQL 数据库服务器上的suppliers
数据库。
第二步,从vendors
表中查询数据:
SELECT * FROM vendors WHERE vendor_id = 1;
vendor_id | vendor_name
-----------+-------------
1 | 3M Co.
(1 row)
第三步,启动另一个终端并运行 Python 程序来更新 id 为 1 的供应商名称:
python update.py
最后,从 psql 程序中查询vendors
表中的数据以验证更新。
SELECT * FROM vendors WHERE vendor_id = 1;
vendor_id | vendor_name
-----------+-------------
1 | 3M Corp
(1 row)
ID 为 1 的供应商名称已按预期更改。
在本教程中,您学习了如何通过 Python 程序更新 PostgreSQL 数据库表中的数据。