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语句时,最好使用参数来传递值,而不是直接拼接字符串。
- 记得在使用时适当处理异常,确保关闭游标和连接以释放资源。
参考资料
- gpt
- psycopg官方文档
- csdn
- geek-docs