PostgreSQL Python 教程: 更新表中的数据

八月 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_table

假设供应商更改了名称,我们想要更新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 数据库表中的数据。