目录
一、需求问题
需求一:获取所有表名
在mysql数据库中,我们想获取某个库下的所有表名时,只需要使用命令:
show tables;
但是,在PostgreSQL数据库时,是不通用的。
需求二:获取表的字段信息
类同需求一,我们想获取表含有的哪些字段信息,又如何实现呢?
在mysql中,只需要使用命令:
SHOW FULL COLUMNS FROM tbl_name [FROM db_name] # 列出字段及详情
同样,在PostgreSQL数据库时,是不通用的。
上述两个需求呢,我们都想通过使用python来连接postgresql数据库,便于程序化和后续数据信息的处理。
二、问题解决办法
我们想通过python连接数据库来实现,我们先要了解如何用python连接postgres数据库,然后才能在此基础上实现上述的需求。
2.1 python连接postgres数据库的方法
关于连接postgresql数据库的一些方法,总结在博文1【python连接PostgreSQL数据库获取数据的办法】中。
2.2 获取库中的所有表的表名
在连接上数据库后,无论是获取库中的所有表名称还是获取表的字段信息,总体上和获取数据库的数据过程是一样的,只是把获取数据的sql语句换成获取表名或者字段的语句而已。
获取数据库的所有表名语法:
select * from pg_tables [where schemaname = ‘schamaname’]
其中中括号的内容为可选参数,如果不设定条件,就返回连接的数据库中所有的表名信息;如果设定,则返回对应模式下的所有表名信息。
一个完整的示例如下代码所示:
import pandas as pd
import re
import psycopg2
from sqlalchemy import create_engine
# 连接库账户信息
gongsi_engine = create_engine('postgresql+psycopg2://username:password@host:port/databaseName') # 相关参数替换即可
# 从公司数据库读取需要的数据表
company_data = pd.read_sql(r"select * from pg_tables where schemaname = 'public';",con=gongsi_conn)
company_data.head()
2.3 获取数据库指定表的字段信息
获取数据表的字段信息,postgres的语法格式为:
select * from information_schema.columns [ where table_schema=‘table_schema’ [and table_name=‘table_name’] ]
同样,中括号中的限定条件,就是自定返回哪些库表的字段信息,如果不指定,则返回所有表对应的字段信息。
示例如下:
import pandas as pd
import re
import psycopg2
from sqlalchemy import create_engine
# 连接库账户信息
gongsi_engine = create_engine('postgresql+psycopg2://username:password@host:port/databaseName') # 相关参数替换即可
company_data = pd.read_sql(r"select * from information_schema.columns where table_schema='table_schema' and table_name='table_name' ", con=gongsi_engine )
company_data.head()
三、小感
落脚点最后都是对数据库本身的使用语法的熟练情况。所以, 还是要对数据库基本的增删改查操作还是要熟练掌握,这是一个分析师应该具备的基本素养!