当前位置: 首页 > ops >正文

怎么使用python进行PostgreSQL 数据库连接?

使用Python连接PostgreSQL数据库

在Python中连接PostgreSQL数据库,最常用的库是psycopg2。以下是详细的使用指南:

安装psycopg2

首先需要安装psycopg2库:

pip install psycopg2
# 或者使用二进制版本(安装更快)
pip install psycopg2-binary

基本连接与操作

1. 建立数据库连接

import psycopg2# 建立连接
conn = psycopg2.connect(dbname="your_database",user="your_username",password="your_password",host="your_host",port="your_port"
)# 创建游标对象
cur = conn.cursor()

2. 执行SQL查询

# 执行简单查询
cur.execute("SELECT * FROM your_table LIMIT 5;")# 获取结果
rows = cur.fetchall()
for row in rows:print(row)

3. 执行参数化查询(防止SQL注入)

# 使用参数化查询
user_id = 5
cur.execute("SELECT * FROM users WHERE id = %s;", (user_id,))
user = cur.fetchone()
print(user)

4. 插入数据

# 插入单条数据
cur.execute("INSERT INTO users (name, email) VALUES (%s, %s) RETURNING id;",('John Doe', 'john@example.com')
)
user_id = cur.fetchone()[0]
conn.commit()  # 必须提交事务
print(f"插入的用户ID: {user_id}")# 批量插入
users_data = [('Alice', 'alice@example.com'),('Bob', 'bob@example.com'),('Charlie', 'charlie@example.com')
]
cur.executemany("INSERT INTO users (name, email) VALUES (%s, %s);",users_data
)
conn.commit()

5. 更新数据

cur.execute("UPDATE users SET email = %s WHERE id = %s;",('new_email@example.com', 1)
)
conn.commit()

6. 删除数据

cur.execute("DELETE FROM users WHERE id = %s;",(5,)
)
conn.commit()

使用上下文管理器(推荐)

# 使用with语句自动管理连接
with psycopg2.connect(dbname="your_database",user="your_username",password="your_password",host="your_host"
) as conn:with conn.cursor() as cur:cur.execute("SELECT * FROM users;")for row in cur:print(row)# 不需要显式调用commit()或close(),with语句会自动处理

使用连接池(适用于Web应用)

对于Web应用等需要频繁连接数据库的场景,可以使用连接池:

from psycopg2 import pool# 创建连接池
connection_pool = pool.SimpleConnectionPool(minconn=1,maxconn=10,dbname="your_database",user="your_username",password="your_password",host="your_host"
)# 从连接池获取连接
conn = connection_pool.getconn()
cur = conn.cursor()
cur.execute("SELECT * FROM users;")
# ... 执行操作 ...# 将连接返回给连接池
connection_pool.putconn(conn)

使用SQLAlchemy(ORM方式)

如果你更喜欢使用ORM,可以安装SQLAlchemy:

pip install sqlalchemy psycopg2-binary

然后使用:

from sqlalchemy import create_engine, text# 创建引擎
engine = create_engine('postgresql://user:password@localhost:5432/dbname')# 执行查询
with engine.connect() as connection:result = connection.execute(text("SELECT * FROM users;"))for row in result:print(row)

注意事项

  1. 始终记得提交事务(conn.commit())或回滚(conn.rollback()
  2. 使用参数化查询防止SQL注入
  3. 操作完成后关闭游标和连接
  4. 对于生产环境,考虑使用连接池
  5. 将数据库凭据存储在环境变量或配置文件中,不要硬编码在代码里

以上是Python连接和操作PostgreSQL数据库的基本方法。根据你的具体需求,可以选择最适合的方式。

http://www.xdnf.cn/news/6565.html

相关文章:

  • OpenCV CUDA模块中矩阵操作------分布统计类
  • RAG数据处理:PDF/HTML
  • LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(2)流编辑器系统
  • MySQL 8.0 OCP 1Z0-908 131-140题
  • 碰一碰发视频工具应用场景解析与 OEM 贴牌部署注意事项
  • QTreeView设置显示连接线
  • 【Linux 学习计划】-- 权限
  • 【控制波形如何COPY并无痛使用】
  • python中字符串的操作
  • 电动流量调节 V 型球阀:工业流体控制的理想选择-耀圣
  • uv python 卸载
  • python调用金蝶api接口
  • 分布式锁: Redis和ZooKeeper两种分布式锁对比
  • 【时空图神经网络 交通】相关模型2:STSGCN | 时空同步图卷积网络 | 空间相关性,时间相关性,空间-时间异质性
  • Go语言爬虫系列教程 实战项目JS逆向实现CSDN文章导出教程
  • 0-INViT:一个具有不变嵌套视图Transformer的可推广路由问题求解器(code)(未完)
  • 网页工具-OTU/ASV表格物种分类汇总工具
  • Spyglass:跨时钟域同步(同步使能)
  • ubuntu22.04卸载vscode
  • 深度学习中的归一化:提升模型性能的关键因素
  • Service Mesh
  • Linux下可执行程序的生成和运行详解(编译链接汇编图解)
  • 针对大事务问题对业务存储过程改造
  • TLP5814H是一款高度集成的栅极驱动器光电耦合器
  • IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
  • 文本分类任务Qwen3-0.6B与Bert:实验见解
  • JavaSwing中的容器之--JScrollPane
  • C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解
  • 在 Neo4j 中实现向量化存储:从文本到高效语义搜索
  • 【爬虫】DrissionPage-4