PostgreSQL Python 教程: 从表中删除数据

八月 14, 2023

摘要:本教程向您展示在 Python 中如何使用 psycopg 数据库适配器从 PostgreSQL 表中删除数据。

Python 中删除 PostgreSQL 表数据的步骤

要在 Python 中删除 PostgreSQL 表中的数据,请使用以下步骤:

首先,通过调用 psycopg 模块的connect()函数创建一个新的数据库连接

conn = psycopg2.connect(dsn)

connect()函数会返回一个新的connection对象。

接下来,要执行任何语句,您需要一个cursor对象。要创建新的游标对象,请调用连接对象的cursor()方法,如下所示:

cur = conn.cursor()

然后,执行DELETE语句。如果要将值传递给DELETE语句,请在DELETE语句中使用占位符 (%s),并将输入值传递给execute()方法的第二个参数。

带有一个用于表示字段id值的占位符的DELETE语句如下:

DELETE FROM table_1 WHERE id = %s;

要将值value_1绑定到占位符,您可以调用execute()方法,并将输入值作为元组传递给第二个参数,如下所示:

cur.execute(delete_sql, (value_1,))

之后,通过调用该connection对象的commit()方法,将更改永久保存到数据库中。

conn.commit()

最后,通过调用cursorconnection对象的close()方法,关闭与 PostgreSQL 数据库服务器的通信。

cur.close()
conn.close()

Python 删除 PostgreSQL 表中数据的示例

为了演示,我们将使用在创建表教程中创建的suppliers数据库中的parts表。

以下delete_part()函数删除part_id指定的parts表中的一行。

#!/usr/bin/python

import psycopg2
from config import config

def delete_part(part_id):
    """ delete part by part id """
    conn = None
    rows_deleted = 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("DELETE FROM parts WHERE part_id = %s", (part_id,))
        # get the number of updated rows
        rows_deleted = 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 rows_deleted

在测试delete_part()函数之前,我们从parts表中查询数据结果如下:

suppliers=# SELECT * FROM parts;
 part_id |  part_name
---------+-------------
       1 | SIM Tray
       2 | Speaker
       3 | Vibrator
       4 | Antenna
       5 | Home Button
       6 | LTE Modem
(6 rows)

现在我们运行 Python 程序来删除 id 为 1 的部件。

if __name__ == '__main__':
    deleted_rows = delete_part(2)
    print('The number of deleted rows: ', deleted_rows)

我们再次从parts表中查询数据以确认 Python 程序所做的删除。

suppliers=# SELECT * FROM parts;
 part_id |  part_name
---------+-------------
       2 | Speaker
       3 | Vibrator
       4 | Antenna
       5 | Home Button
       6 | LTE Modem
(5 rows)

部件 ID 为 1 的行已按预期成功删除。

在本教程中,您学习了如何使用 Python 从 PostgreSQL 表中删除数据。