📜  从 Python 查询 PSQL 数据库(1)

📅  最后修改于: 2023-12-03 15:21:53.618000             🧑  作者: Mango

从 Python 查询 PSQL 数据库

在 Python 中查询 PSQL 数据库是一个常见的任务,在本文中将介绍如何使用 Python 执行此任务。在开始之前,请确保已安装必要的 Python 和 PostgreSQL 驱动程序,我们使用 psycopg2 作为我们的驱动程序。

连接数据库

首先,我们需要建立到数据库的连接,这可以使用 psycopg2 实现。我们需要提供数据库的主机名、端口号、用户名和密码。

import psycopg2

# 连接数据库
conn = psycopg2.connect(
    host="localhost",
    port="5432",
    user="mydatabaseuser",
    password="mypassword",
    database="mydatabase"
)
查询数据

有了连接,我们就可以开始查询数据库了。我们可以使用 cursor() 方法创建一个游标对象,然后使用它来执行 SQL 语句并获取结果:

# 创建游标对象
cur = conn.cursor()

# 执行 SQL 查询
cur.execute("SELECT * FROM mytable")

# 获取结果集
rows = cur.fetchall()

# 关闭游标
cur.close()

# 打印结果
for row in rows:
    print(row)

在此示例中,我们使用 SELECT * FROM mytable 查询数据库中的所有记录,并使用 fetchall() 方法获取整个结果集。通过将游标关闭,我们可以释放与查询相关的所有资源。

参数化查询

在处理用户输入等动态数据时,最好使用参数化查询,避免 SQL 注入攻击。下面是一个使用参数化查询的示例:

# 执行参数化查询
cur.execute("SELECT * FROM mytable WHERE id = %s", (myid,))

# 获取结果集
rows = cur.fetchall()

在此示例中,我们将 id 值作为参数传递给查询,而不是将其硬编码到 SQL 语句中。注意,我们使用了占位符 %s 来表示参数,并将参数作为元组 (myid,) 传递给 execute() 方法。

事务处理

在执行多个查询时,有时需要使用事务处理来确保数据的完整性。下面是一个使用事务处理的示例:

# 开始事务
conn.autocommit = False
cur = conn.cursor()

try:
    # 执行第一个查询
    cur.execute("INSERT INTO mytable (id, name) VALUES (%s, %s)", (1, "Alice"))

    # 执行第二个查询
    cur.execute("UPDATE mytable SET name = %s WHERE id = %s", ("Bob", 1))

    # 提交事务
    conn.commit()
except:
    # 回滚事务
    conn.rollback()

# 关闭游标
cur.close()

在此示例中,我们将 autocommit 属性设置为 False,以启用事务处理。然后,我们执行两个查询并尝试提交事务。如果发生异常,则回滚事务。只有当所有查询成功执行时,才会提交事务。

结论

现在您已经了解如何使用 Python 查询 PSQL 数据库了,无论是单个查询还是事务处理。请记住,在处理动态数据时,请使用参数化查询来避免 SQL 注入攻击。