【Python系列】Python 连接 PostgreSQL 数据库并查询数据

devtools/2025/1/18 14:30:24/

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。??? 欢迎订阅本专栏

博客目录
    • 1. PostgreSQL 简介
    • 2. psycopg2 库
    • 3. 安装 psycopg2
    • 4. 连接 PostgreSQL 数据库
    • 5. 执行查询
    • 6. 处理查询结果
    • 7. 插入、更新和删除数据
    • 8. 提交事务和关闭连接
    • 9. 错误处理

在现代软件开发中,数据库是存储和检索数据的核心组件。PostgreSQL(简称 PG)是一个功能强大的开源对象关系数据库系统,它以其稳定性、强大的功能和灵活性而闻名。Python 作为一种流行的编程语言,与 PostgreSQL 的结合使用非常广泛。
在这里插入图片描述

1. PostgreSQL 简介

PostgreSQL 是一个高度可扩展的开源数据库管理系统,它支持 SQL(结构化查询语言)并提供许多现代数据库特性,如部分 ACID(原子性、一致性、隔离性、持久性)事务、触发器、视图、事务完整性、多版本并发控制等。PostgreSQL 的可扩展性允许用户自定义数据类型、函数、操作符等。

2. psycopg2 库

psycopg2是 Python 中用于连接 PostgreSQL 数据库的适配器。它提供了一个非常接近 Python 数据库 API 规范(PEP 249)的接口,使得 Python 开发者可以方便地使用 Python 代码来操作 PostgreSQL 数据库psycopg2支持原生的 Unicode 数据类型,并且可以处理二进制数据。

3. 安装 psycopg2

在开始之前,确保你已经安装了psycopg2库。如果还没有安装,可以通过以下命令安装:

pip install psycopg2-binary

或者,如果你使用的是 Python 3,并且系统中同时安装了 Python 2,可能需要使用pip3

pip3 install psycopg2-binary

psycopg2-binarypsycopg2的预编译版本,它包含了二进制文件,这样可以避免编译源代码的麻烦。

4. 连接 PostgreSQL 数据库

连接 PostgreSQL 数据库需要知道数据库的地址、端口、数据库名、用户名和密码。以下是一个简单的示例,展示如何使用psycopg2连接到 PostgreSQL 数据库

import psycopg2# 连接数据库的参数
dbname = "your_dbname"
user = "your_username"
password = "your_password"
host = "your_host"
port = "your_port"# 连接字符串
conn_string = f"host={host} port={port} dbname={dbname} user={user} password={password}"# 建立连接
conn = psycopg2.connect(conn_string)# 创建cursor对象
cursor = conn.cursor()

在这段代码中,你需要将your_dbnameyour_usernameyour_passwordyour_hostyour_port替换为实际的数据库连接信息。

5. 执行查询

一旦建立了数据库连接,就可以使用cursor对象来执行 SQL 查询了。以下是一个查询示例:

# 要执行的SQL查询
query = "SELECT * FROM your_table_name;"# 执行查询
cursor.execute(query)# 获取查询结果
results = cursor.fetchall()# 打印结果
for row in results:print(row)

在这个例子中,你需要将your_table_name替换为你想要查询的表名。fetchall()方法会返回查询结果的所有行,每行是一个元组。

6. 处理查询结果

查询结果通常以元组的形式返回,每个元组代表一行数据。你可以通过索引或列名来访问元组中的值。例如:

for row in results:print(f"ID: {row[0]}, Name: {row[1]}")

如果你更喜欢使用列名而不是索引,可以在执行查询后使用cursor.description来获取列名,然后使用列名访问数据:

# 获取列名
columns = [desc[0] for desc in cursor.description]# 使用列名访问数据
for row in results:print(f"ID: {row[columns.index('id')]}, Name: {row[columns.index('name')]}")

7. 插入、更新和删除数据

除了查询数据,psycopg2还支持插入、更新和删除操作。以下是一些基本的示例:

# 插入数据
insert_query = "INSERT INTO your_table_name (column1, column2) VALUES (%s, %s);"
cursor.execute(insert_query, (value1, value2))# 更新数据
update_query = "UPDATE your_table_name SET column1 = %s WHERE column2 = %s;"
cursor.execute(update_query, (new_value1, condition_value2))# 删除数据
delete_query = "DELETE FROM your_table_name WHERE column1 = %s;"
cursor.execute(delete_query, (condition_value1,))

在这些操作中,%s是一个占位符,用于传递参数化的查询值,这有助于防止 SQL 注入攻击。

8. 提交事务和关闭连接

在执行插入、更新或删除操作后,需要提交事务以确保更改被保存到数据库中:

# 提交事务
conn.commit()

完成所有数据库操作后,应该关闭cursor对象和数据库连接:

# 关闭cursor
cursor.close()# 关闭连接
conn.close()

9. 错误处理

在操作数据库时,可能会遇到各种错误,如连接失败、执行查询错误等。使用try...except块可以捕获和处理这些异常:

try:conn = psycopg2.connect(conn_string)cursor = conn.cursor()# 执行数据库操作...
except psycopg2.Error as e:print(f"Database error: {e}")
finally:if conn is not None:conn.close()

觉得有用的话点个赞 ???? 呗。
本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!???

???如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!?? ?? ??

???Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!???

img


http://www.ppmy.cn/devtools/151583.html

相关文章

通信网络安全分层及关键技术解决

要实现信息化,就必须重视信息网络安全。信息网络安全绝不仅是IT行业的问题,而是一个社会问题,是一个包括多学科的系统安全工程问题,并直接关系到国家安全。因此,知名安全专家沈昌祥院士呼吁,要像重视两弹一…

AWS S3 跨账户访问 Cross Account Access

进入S3对应的存储桶,上面选项选权限,存储桶策略 -- 编辑,输入对应的policy。 完全控制,包含上传删除权限,policy如下: {"Version": "2012-10-17","Statement": [{"Si…

学习threejs,使用OrbitControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.OrbitControls 相机控…

SpringBoot:使用HTTP2+protobuf实现高性能微服务调用(二)客户端实现

上一篇文章中已经介绍了服务器端如何改造以支持HTTP2.0 protobuf,并且给了一个客户端实现的例子,但这个例子并没有与SpringBoot结合。比如能否让RestTemplate或WebClient支持HTTP2.0 protobuf,下面就给出代码: 1、RestTemplate…

PHP:写接口与接口的调用(完整版,封装公共方法)

说明:绑定的资源详细展示了两个项目的接口、接口调用的实现,已经数据库的连接,目录展示更加一目了然,有需要可以下载资源,实际文章已经描述的很详细了 一、A页面-发送请求页面 1、说明 发送请求部分,去调…

如何将原来使用cmakelist编译的qt工程转换为可使用Visual Studio编译的项目

将原来使用CMakeLists.txt编译的Qt工程转换为可使用Visual Studio编译的项目,可以通过以下步骤实现: 一、准备阶段 安装必要的软件: 确保已安装Visual Studio,并选择了C开发相关的组件。安装CMake,并确保其版本与Qt和…

初学者如何用 Python 写第一个爬虫?

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…

.NET MAUI进行UDP通信

.NET MAUI是一个开源的跨平台框架库。NET,使创建丰富、现代的用户界面变得容易,.NET MAUI提供了一个多平台应用程序UI。我们可以使用.NET MAUI,用于使用C#和XAML创建本地移动和桌面应用程序。它还支持XAML热重载,这意味着我们可以在运行时编辑…