Psycopg2操作postgresql数据库

2023年12月13日 · 679 字 · 2 分钟 · Psycopg2 Postgresql Python

Psycopg2操作postgresql数据库

简介

psycopg2 是一个用于连接 PostgreSQL 数据库的 Python 库,提供了许多功能和方法来执行各种数据库操作。

psycopg2 常用操作及示例代码

连接到数据库

connection = psycopg2.connect(
    host="your_host",
    database="your_database",
    user="your_user",
    password="your_password"
)

创建游标

cursor = connection.cursor()

执行SQL查询

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
records = cursor.fetchall()

for record in records:
print(record)

执行SQL更新

cursor.execute("UPDATE your_table SET status = 1 WHERE id = %s;", (record_id,))

执行SQL插入

cursor.execute("INSERT INTO your_table (column1, column2) VALUES (%s, %s);", (value1, value2))

事务管理:

try:
    # 开始事务
    connection.autocommit = False

    # 执行多个 SQL 操作
    cursor.execute("UPDATE your_table SET status = 1 WHERE id = %s;", (record_id,))
    cursor.execute("INSERT INTO another_table (column) VALUES (%s);", (value,))

    # 提交事务
    connection.commit()
except Exception as e:
    # 发生异常时回滚事务
    connection.rollback()
    print(f"Error: {e}")
finally:
    # 恢复自动提交
    connection.autocommit = True

关闭游标和连接:

# 关闭游标
cursor.close()

# 关闭连接
connection.close()

psycopg2各种查询方法及示例代码:

execute() 方法:

用于执行 SQL 命令,如 SELECT、INSERT、UPDATE、DELETE 等。

示例:

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
records = cursor.fetchall()

executemany() 方法:

用于执行相同的 SQL 命令多次,通常用于批量插入或更新。

示例:

data = [(value1, value2), (value3, value4), ...]
cursor.executemany("INSERT INTO your_table (column1, column2) VALUES (%s, %s);", data)

mogrify() 方法:

返回 SQL 命令的字符串表示,但不执行它。通常用于调试目的。

示例:

query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s);"
data = (value1, value2)
sql_command = cursor.mogrify(query, data)

fetchone() 方法:

用于从查询结果中获取一行数据。

示例:

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
record = cursor.fetchone()

fetchall() 方法:

用于从查询结果中获取所有行的数据。

示例:

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
records = cursor.fetchall()

fetchmany() 方法:

用于从查询结果中获取指定数量的行的数据。

示例:

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
batch_size = 10
records = cursor.fetchmany(batch_size)

scroll() 方法:

用于在查询结果中移动指定数量的行。

示例:

cursor.execute("SELECT * FROM your_table WHERE status = 0;")
cursor.scroll(5, mode='absolute')  # 移动到结果集的第 6 行
record = cursor.fetchone()

其他

  • 使用参数化查询可以防止SQL注入攻击,因此在执行SQL语句时,最好使用参数来传递值,而不是直接拼接字符串。
  • 记得在使用时适当处理异常,确保关闭游标和连接以释放资源。

参考资料