• Python读取postgresql数据库


    目录

    一、读取postgresql数据库

    二、查询数据


    一、读取postgresql数据库

    (1)首先,我们需要安装 psycopg 驱动。通过 pip 安装最新的 psycopg

    pip install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    (2) 创建一个数据库连接的配置文件 dbconfig.ini,添加以下内容:

    1. [postgresql]
    2. host = [ip地址]
    3. port = 5432
    4. database = xxx
    5. user = xxx
    6. password = xxx

    配置文件中存储了数据库的连接信息:主机、端口、数据库、用户以及密码;我们需要按照自己的环境进行配置。

    (3)然后,新建一个测试数据库连接的 Python 文件 postgresql_connection.py,

    文件目录结构为:

     postgresql_connection.py的完整代码为:

    1. # 导入 psycopg2 模块和 Error 对象
    2. import psycopg2
    3. from psycopg2 import DatabaseError
    4. from configparser import ConfigParser
    5. def read_db_config(filename='dbconfig.ini', section='postgresql'):
    6. """ 读取数据库配置文件,返回一个字典对象"""
    7. # 创建解析器,读取配置文件
    8. parser = ConfigParser()
    9. parser.read(filename)
    10. # 获取 postgresql 部分的配置
    11. db = {}
    12. if parser.has_section(section):
    13. items = parser.items(section)
    14. for item in items:
    15. db[item[0]] = item[1]
    16. else:
    17. raise Exception('文件 {1} 中未找到 {0} 配置信息!'.format(section, filename))
    18. return db
    19. if __name__ == '__main__':
    20. db_config = read_db_config()
    21. connection = None
    22. try:
    23. # 使用 psycopg2.connect 方法连接 PostgreSQL 数据库
    24. connection = psycopg2.connect(**db_config)
    25. cur = connection.cursor() # 创建一个游标
    26. cur.execute('SELECT version()') # 获取 PostgreSQL 版本号
    27. db_version = cur.fetchone()
    28. print("连接成功,PostgreSQL 服务器版本:", db_version) # 输出 PostgreSQL 版本
    29. # `在这里插入代码片`
    30. cur.close() # 关闭游标
    31. except (Exception, DatabaseError) as e:
    32. print("连接 PostgreSQL 失败:", e)
    33. finally:
    34. if connection is not None: # 释放数据库连接
    35. connection.close()
    36. print("PostgreSQL 数据库连接已关闭。")

    (4)运行程序,

    • 首先,我们导入了 psycopg2 驱动和解析配置文件的 configparser 模块;
    • 然后,创建一个读取配置文件的 read_db_config 函数;
    • 接下来调用 psycopg2.connect 函数创建一个新的数据库连接;
    • 然后通过连接对象的 cursor 函数创建一个新的游标,并且执行查询语句返回数据库的版本;
    • 在此之后,调用游标对象的 fetchone() 方法获取返回结果并打印信息;
    • 最后,调用 close() 方法关闭游标资源和数据库连接对象。

    执行以上脚本,返回的信息如下:

    1. 连接成功,PostgreSQL 服务器版本: ('PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit',)
    2. PostgreSQL 数据库连接已关闭。

     

    二、查询数据

    游标对象提供了三种获取返回结果的方法:fetchone() 获取下一行数据,fetchmany(size=cursor.arraysize) 获取下一组数据行,fetchall() 返回全部数据行。

    (1)我们创建一个新的文件 postgresql_query.py:

    1. # 导入 psycopg2 模块和 Error 对象
    2. import psycopg2
    3. from psycopg2 import DatabaseError
    4. from configparser import ConfigParser
    5. def read_db_config(filename='dbconfig.ini', section='postgresql'):
    6. """ 读取数据库配置文件,返回一个字典对象
    7. """
    8. # 创建解析器,读取配置文件
    9. parser = ConfigParser()
    10. parser.read(filename)
    11. # 获取 postgresql 部分的配置
    12. db = {}
    13. if parser.has_section(section):
    14. items = parser.items(section)
    15. for item in items:
    16. db[item[0]] = item[1]
    17. else:
    18. raise Exception('文件 {1} 中未找到 {0} 配置信息!'.format(section, filename))
    19. return db
    20. if __name__ == '__main__':
    21. db_config = read_db_config()
    22. connection = None
    23. try:
    24. connection = psycopg2.connect(**db_config) # 使用 psycopg2.connect 方法连接 PostgreSQL 数据库
    25. cur = connection.cursor() # 创建一个游标
    26. # 定义 SQL 语句
    27. sql = """ select id, name, age from users"""
    28. cur.execute(sql) # 执行 SQL 命令
    29. print("用户数量:", cur.rowcount)
    30. # 获取结果
    31. user = cur.fetchone()
    32. while user is not None:
    33. print(user)
    34. user = cur.fetchone()
    35. cur.close() # 关闭游标
    36. except (Exception, DatabaseError) as e:
    37. print("操作失败:", e)
    38. finally:
    39. if connection is not None: # 释放数据库连接
    40. connection.close()

     (2)游标对象的 rowcount 属性代表了返回的数据行数,fetchone() 方法返回一行数据或者 None,while 循环用于遍历和打印查询结果。由于 users 表中目前只有一行数据,执行以上文件的结果如下:

    1. 用户数量: 2
    2. (1, 'lane', False)
    3. (2, 'lane_dynamic', False)

     

  • 相关阅读:
    MBR30300VCT-ASEMI肖特基二极管有什么用
    薄盒借周杰伦IP卖藏品 车翻在奈雪的茶
    刷题记录:HDU - 3001Travelling
    罗丹明 800,CAS号:101027-54-7
    【MongoDB】集群搭建实战 | 副本集 Replica-Set | 分片集群 Shard-Cluster | 安全认证
    VUE指令语法解析标签属性
    EtherCAT主站转Ethernet/IP网关
    图解 Redis 分布式锁,写得太好了!
    Moment.js 处理日期库
    Spark基本知识
  • 原文地址:https://blog.csdn.net/qq_45956730/article/details/127069943