You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PostgreSQL数据读取代码改写为OOP格式以获取国家名称列表

PostgreSQL数据库查询代码面向对象改写方案

完整可运行代码

import psycopg2

class CountryDBOperator:
    def __init__(self, host='localhost', database='Country Details', user='postgres', password='root'):
        # 初始化存储数据库连接参数
        self.host = host
        self.database = database
        self.user = user
        self.password = password
        self.conn = None
        self.cur = None

    def _tuple_to_str_list(self, rows):
        """将查询返回的元组列表转换为字符串列表,对应原c_list函数"""
        return [row[0] for row in rows]

    def get_country_list(self):
        """连接数据库查询国家列表,对应原connect_db函数"""
        try:
            # 建立数据库连接
            self.conn = psycopg2.connect(
                host=self.host,
                database=self.database,
                user=self.user,
                password=self.password
            )
            self.cur = self.conn.cursor()
            # 执行查询语句
            self.cur.execute("SELECT country_name FROM country_details")
            rows = self.cur.fetchall()
            # 转换格式后返回
            return self._tuple_to_str_list(rows)
        except Exception as e:
            print(f"操作出现错误: {e}")
            return []
        finally:
            # 释放资源,先关游标再关连接,修正原代码的顺序问题
            if self.cur:
                self.cur.close()
            if self.conn:
                self.conn.close()

# 调用示例
if __name__ == "__main__":
    db_operator = CountryDBOperator()
    countries = db_operator.get_country_list()
    print(countries)

改造说明

  • 所有数据库相关逻辑都封装在CountryDBOperator类中,符合面向对象封装的特性,后续新增其他查询需求直接在类内扩展方法即可,无需重复编写连接逻辑
  • 类初始化支持自定义传入数据库连接参数,默认保留原代码的配置,适配不同环境的使用需求
  • 私有方法_tuple_to_str_list使用列表推导式简化了原代码的循环逻辑,功能完全一致
  • 新增了异常捕获和资源自动释放逻辑,避免数据库操作异常时出现资源泄漏的问题
  • 修正了原代码先关闭连接再关闭游标的错误顺序,符合psycopg2的资源释放规范

内容的提问来源于stack exchange,提问作者shailesh_07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:04