python3连接postgresql工具类

2022-01-05 21:51:25 浏览数 (1)

目录

一、环境准备

1、python3安装

2、MongoDB4安装

二、安装驱动

1、psycopg2驱动安装

2、pymogo驱动测试

三、py工具类

1、工具脚本

一、环境准备

postgresql官网:https://www.postgresql.org

postgresql中文社区:http://www.postgres.cn/index.php/v2/home

postgresql12中文手册:http://www.postgres.cn/docs/12/index.html

菜鸟教学:https://www.runoob.com/postgresql/postgresql-syntax.html

1、python3安装

windows离线安装python3.6.8环境:https://cloud.tencent.com/developer/article/1929280

Linux 离线安装 python 3.6.10:https://cloud.tencent.com/developer/article/1818613

2、MongoDB4安装

win10安装postgresql:https://cloud.tencent.com/developer/article/1929286

linux安装postgresql:https://cloud.tencent.com/developer/article/1818708

二、安装驱动

1、psycopg2驱动安装

代码语言:javascript复制
pip install psycopg2

2、pymogo驱动测试

代码语言:javascript复制
python
import psycopg2

三、py工具类

1、工具脚本

代码语言:javascript复制
#-*- encoding: utf-8 -*-

import psycopg2

class PGSQLUtil:
    """
    PostgreSQL工具类
    """
    def __init__(self, host="127.0.0.1", user=None, password=None, database=None, port=5432, dsn=None, connection_factory=None, cursor_factory=None, **kwargs):
        """构造函数"""
        self.__database = database
        self.__conn = psycopg2.connect(host=host, user=user, password=password, database=database, port=str(port),
                                       dsn=dsn, connection_factory=connection_factory, cursor_factory=cursor_factory, **kwargs)
        self.__cursor = self.__conn.cursor()

    def __del__(self):
        """析构函数"""
        self.__cursor.close()
        self.__conn.close()

    def get_conn(self):
        """获取连接"""
        return self.__conn

    def get_cursor(self):
        """获取游标"""
        return self.__cursor

    def list_databases(self, vars=None):
        """查询所有数据库"""
        self.__cursor.execute("SELECT pg_database.datname FROM pg_database", vars)
        dbs = []
        for db in self.__cursor.fetchall():
            dbs.append(db[0])
        return dbs

    def list_user_tables(self, vars=None):
        """查询当前用户所有表"""
        self.__cursor.execute("SELECT tablename FROM pg_tables WHERE schemaname='public'", vars)
        # self.__cursor.execute("SELECT * FROM  information_schema.tables WHERE table_schema='public'", vars)
        tables = []
        for table in self.__cursor.fetchall():
            tables.append(table[0])
        return tables

    def list_tables_privileges(self, vars=None):
        """查询所有表的权限"""
        self.__cursor.execute("SELECT * FROM  information_schema.table_privileges", vars)
        return self.__cursor.fetchall()

    def execute(self, sql, vars=None):
        """获取SQL执行结果"""
        self.__cursor.execute(sql, vars)
        return self.__cursor.fetchall()

    def get_version(self, vars=None):
        """获取MySQL版本"""
        self.__cursor.execute("SELECT VERSION()", vars)
        version = self.__cursor.fetchone()
        print("Postgresql Version : %s" % version)
        return version[0]

    def list_table_metadata(self, vars=None):
        """查询所有表的元数据信息"""
        sql = "SELECT * FROM information_schema.TABLES WHERE TABLE_TYPE !='SYSTEM VIEW' AND TABLE_SCHEMA NOT IN ('sys','mysql','information_schema','performance_schema')"
        self.__cursor.execute(sql, vars)
        return self.__cursor.fetchall()

    def get_table_fields(self, table, vars=None):
        """获取表字段信息"""
        sql = "SELECT column_name FROM information_schema.COLUMNS WHERE table_schema='public' AND table_name='"  table  "'"
        self.__cursor.execute(sql, vars)
        fields = []
        for field in self.__cursor.fetchall():
            fields.append(field[0])
        return fields

    def table_metadata(self, table, vars=None):
        """获取表字段信息"""
        sql = "SELECT * FROM information_schema.COLUMNS WHERE table_schema='public' AND table_name='"  table  "'"
        self.__cursor.execute(sql, vars)
        fields = []
        for field in self.__cursor.fetchall():
            fields.append(field)
        return fields

if __name__ == "__main__":
    pgsqlUtil = PGSQLUtil(host="127.0.0.1", user="root", password="123456", database="xl")
    pgsqlUtil.get_version()
    conn = pgsqlUtil.get_conn()
    ## 查询所有数据库
    databases = pgsqlUtil.list_databases()
    print(type(databases), databases)
    ## 查询当前用户的表
    tables = pgsqlUtil.list_user_tables()
    print(type(tables), tables)
    ## 查询所有表的权限信息
    privileges = pgsqlUtil.list_tables_privileges()
    for privilege in privileges:
        print(privilege)
    ## 查询表数据
    result = pgsqlUtil.execute("SELECT * FROM t_user")
    for i in result:
        print(i)

    # result = pgsqlUtil.get_table_fields("t_user")
    result = pgsqlUtil.table_metadata("t_user")
    for i in result:
        print(i)

0 人点赞