暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python连接到PostgreSQL并查询数据的方法

瀚高PG实验室 2021-04-29
5369

Python环境

本文中使用的环境是Python 3.6.4。还需要提前安装psycopg2模块,此模块用于连接PostgreSQL数据库。

    pip install psycopg2

    连接到PostgreSQL数据库并查询数据

    首先引用psycopg2模块:

      import psycopg2

      然后就可以通过如下方式连接到PostgreSQL数据库并执行查询数据的SQL语句:

        # database,user,password,host,port分别对应要连接的PostgreSQL数据库的数据库名、数据库用户名、用户密码、主机、端口信息,请根据具体情况自行修改
        conn = psycopg2.connect(database="test",user="postgres",password="postgres",host="127.0.0.1",port="5432")
        cur = conn.cursor()
        # 执行查询命令
        cur.execute("SELECT name,setting FROM pg_settings")

        获取查询结果

        接着需要获取查询的结果,可以选择直接打印出来或者存放到文件中。

        1)直接打印结果集

          # 获取结果集的每一行
          rows = cur.fetchall()
          # 获取所有字段名
          all_fields = cur.description


          # 首先打印字段名
          field_messages = []
          for i in range(len(all_fields)):
          # 格式化输出结果,len参数是各列的显示宽度,可以指定常量,也可自定义函数进行获取。
          field_messages.append("{str:<{len}}".format(str=str(all_fields[i][0]), len=50))

          field_message = "".join(field_messages)
          print(field_message)

          # 然后逐行打印结果集
          for row in rows:
          row_messages = []
          for j in range(len(row)):
          # 格式化结果集
          row_messages.append("{str:<{len}}".format(str=str(row[j]), len=50))
          row_message = "".join(row_messages)
              print(row_message)

          2)将结果集存放到文件中(以txt文件为例)

            # 获取结果集的每一行
            rows = cur.fetchall()
            # 获取所有字段名
            all_fields = cur.description
            # 写入文件results.txt中,此处需要填写实际路径名
            with open("results.txt", "w", encoding="utf-8") as f:
            # 首先写入字段名
            field_messages = []
            for i in range(len(all_fields)):
            # 格式化输出结果,len参数是各列的显示宽度,可以指定常量,也可自定义函数进行获取。
            field_messages.append("{str:<{len}}".format(str=str(all_fields[i][0]), len=50))
            field_message = "".join(field_messages)
            f.write(field_message + "\n")


            # 然后写入结果集
            for row in rows:
            row_messages = []
            for j in range(len(row)):
            # 格式化结果集
            row_messages.append("{str:<{len}}".format(str=str(row[j]), len=50))
            row_message = "".join(row_messages)
                    f.write(row_message + "\n")

            关闭数据库连接

            所有操作完成之后需要关闭对PostgreSQL数据库的连接。

              # 关闭连接
              conn.close()


              文章转载自瀚高PG实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论