直接上代码,使用pandas库读写操作pgsql数据库,第一段代码数据库操作类pg_connecting.py,第二段数据库连接信息类setting.py,第三段实例化

# coding: utf-8
# --利用pandas库读/写pg数据库,pg_connecting.py
--
import psycopg2
import sqlalchemyimport pandas as pd
from datetime import datetimefrom collections import OrderedDict  # 使用OrderedDict保证字典有序# --------PostgreSQL--------
class PgsqlConnector:# ---**kwargs:接收任意数量参数---def __init__(self, **kwargs):if len(OrderedDict(kwargs)) >= 2:for value in OrderedDict(kwargs).values():if type(value) == psycopg2.extensions.connection:self.conn = valueelif type(value) == sqlalchemy.engine.base.Engine:self.engine = valueelif type(value) == str:self.schema = valueelse:self.schema = 'public'print('Error.输入应为psycopg2.connect对象和sqlalchemy.create_engine对象,请检查')else:print('Error.需要至少2个关键字参数,请检查')# --使用无变量SQL语句从数据库抽取数据--def read_table(self, sql):"""Arg:sql: [str]使用的SQL语句Returns:data: [DataFrame]查询结果"""db = self.conncursor = db.cursor()cursor.execute(sql)data = cursor.fetchall()data = pd.DataFrame(list(data))db.commit()return data# --以时间戳为条件从数据库抽取数据--def read_with_time(self, time, sql):"""Args:time: [str]用于WHERE查询的时间数据sql: [str]使用的SQL语句Returns:data: [DataFrame]查询结果"""db = self.conncursor = db.cursor()# 执行sql语句,以time作为条件cursor.execute(sql % time)data = cursor.fetchall()data = pd.DataFrame(list(data))db.commit()return data# --指定列名SELECT,支持LIMIT关键字和单条件WHERE查询--def select_by_columns(self, tbl, limit=None, **kwargs):"""Args:tbl: [str] 要查询的表明limit: [int] 设置LIMIT数量**kwargs: [list] 支持3个自定义字段,顺序固定为[要提取的列名列表(,where语句内容)(,where语句判断变量)]例如:[['c1','c2'],'create_time >', timestamp变量名]Returns:data: [DataFrame]查询结果"""params = OrderedDict(kwargs)db = self.conncursor = db.cursor()sql = "SELECT " + ', '.join(list(params.values())[0]) + " FROM %s"if len(params) == 2:sql = sql + ' WHERE ' + list(params.values())[1]else:passif len(params) == 3:sql = sql + ' WHERE ' + list(params.values())[1] + " '%s'" % list(params.values())[2]else:passif limit:sql = sql + " LIMIT %s" % limitelse:passcursor.execute(sql % tbl)data = cursor.fetchall()data = pd.DataFrame(list(data))db.commit()return data# --简单查询--def simple_query(self, sql):db = self.conncursor = db.cursor()# 执行sql语句,以time作为条件cursor.execute(sql)data = cursor.fetchall()db.commit()return data# --数据写入数据库--def to_table(self, data, schema, insert_method, target_table):"""Args:data: [Dataframe]需要插入的数据schema: [str]PgSQL中schema名称insert_method: [str]插入方式: 可选'append','replace','fail'target_table: [str]目标表名称"""# try:data.to_sql(name=target_table, schema=self.schema, con=self.engine, if_exists=insert_method, index=False)print(str(datetime.now()) + ': 处理完成,数据已写入数据库 ')# except Exception:# print(str(datetime.now()) + ': 插入失败!')# --关闭数据库连接--def close_db(self):self.conn.close()

这是连接信息模块setting.py
单独列出,方便后续修改,只需在setting.py这个文件下修改或增加连接信息即可

# coding: utf-8
# --存储设置参数--
import psycopg2
import pymysql
from sqlalchemy import create_engineclass PgSetting:def __init__(self):self.conn = psycopg2.connect("dbname=*** user=*** password=****** host=*** port=***")# 根据自己实际修改self.engine = create_engine('postgresql+psycopg2://user:password@host:port/dbname')self.schema = 'public'

在主函数中实例化

# coding: utf-8
from Settings import PgSetting, FileDirs, TFIDFParamsfrom pg_connection import PgsqlConnector# 数据库连接实例化
pg = PgSetting()
db = PgsqlConnector(conn=pg.conn, engine=pg.engine, schema=pg.schema)
# 查询语句设置(根据自己需要去列)
cols = ['id_1', 'id_2', 'similarity as content_sim', 'time_1', 'time_2', 'address_1', 'address_2']
# 文本相似度的输出表
source_tbl = 'tbl_content_similarity'
# 结果写入表名
targel_tbl = 'tbl_address_sim'
# 插入方式:替换
insert_method = 'replace'# ----主进程----
# 处理数据文件并计算相似度
rawdata = db.select_by_columns(source_tbl, cols=cols)
# 给列赋名,为赋名前是0,1,2……,7,赋名后是id_1,id_2,similarity……,address_2
rawdata.columns = ['id_1', 'id_2', 'similarity', 'time_1', 'time_2', 'address_1', 'address_2']
print(rawdata)

运行结果

         id_1    id_2  similarity  ... address_2
0       12798   16589    0.914289  ... 五常大道绕城桥洞下面
1       12855     332    1.000000  ... 良渚蔬菜市场计家坝湖边
2       12855     383    1.000000  ... 苕溪瓶窑水文站
...       ...     ...         ...  ... ...
16897  132343  107350    0.915108  ... 金家渡农贸市场
16898  132343  127116    0.915108  ... 金家渡农贸市场[16899 rows x 7 columns]

Pandas读/写PG数据库相关推荐

  1. java基础巩固-宇宙第一AiYWM:为了维持生计,做项目经验之~SSM项目错误集锦Part3(项目蹦+pg数据库坏+100%-->线上故障排查经验【业务bug第一步一定是先看日志,写好日志】)~整起

    项目中遇到的一个问题:项目忽然蹦了,用我们的域名登陆不上去了. 根据之前的经验,一般比如我们项目登不上去了或者数据库不上数据了(数据不更新),直接在Xshell上远程reboot一下,再重启一下tom ...

  2. 【自建分布式数据库详细指南】(四)设计:CITUS分布式数据仓库OLAP/OLTP的架构选择及PG数据库优化方法策略

    关于数据库的整体设计,很少有书籍专门试讲,因为这需要博大精深的理论水平以及阅历丰富的工作经验,但往往这两者不可兼得,在设计数据库时需要考虑多方面的因素,如需求,数据体量,数据库架构,硬件环境,成本.这 ...

  3. DTS 及其在PG 数据库生态中的应用

    目录 一.PostgreSQL 数据传输通道关键技术 (一)什么是数据传输通道? (二)PostgreSQL 内置数据类型 (三)PostgreSQL 分区表 (四)PostgreSQL 增量数据获取 ...

  4. PG数据库中的EXPLAIN用法

    PG数据库中的EXPLAIN用法 一.EXPLAIN语法 EXPLAIN命令的主要作用是输出一个query的整个查询计划,具体语法如下: EXPLAIN [ ( option [, ...] ) ] ...

  5. 文本文件 java_简单的用java实现读/写文本文件的示例

    简单的用java实现读/写文本文件的示例 更新时间:2008年07月26日 13:09:26   作者: 同时也展示了如果从输入流中读出来内容写入输出流中(仅限文本流) 三个例子可以独立存在,所以根据 ...

  6. pymatgen读/写各种文件

    PS:请见文末的打赏选项 pymatgen读/写各种文件 pymatgen是材料大数据计算的必备程序包了,其也作为API与materials project对接,可以批量下载自己想要的材料结构.性质, ...

  7. python库读取cif文件_Pymatgen读/写各种文件,pymatgen,读写

    pymatgen读/写各种文件 pymatgen是材料大数据计算的必备程序包了,其也作为API与materials project对接,可以批量下载自己想要的材料结构.性质,它也提供了大量VASP计算 ...

  8. pg数据库json数据类型_PostgreSQL与开发者起舞—让数据库更好服务于开发

    写在前面的话:本文内容有对应50分钟视频讲解,有兴趣可以访问PG与开发者共舞. 很多数据库的对比的活动都是基于数据库本身的一些的底层的功能以及纯数据库方面的对比,等等.更多方面数据库是要为应用来服务的 ...

  9. SQL 审核:基于PG数据库插件hook的SQL规范审核工具

    关注"数据和云",精彩不容错过 内容来源:2017 年 10 月 21 日,平安科技数据库架构师陈刚在"PostgreSQL 2017中国技术大会"进行< ...

最新文章

  1. 51Nod-1046 A^B Mod C【快速模幂】
  2. 《Oracle从入门到精通》读书笔记第八章 管理表空间和数据文件之二
  3. CentOS PPTP ×××
  4. 关于 继承、扩展和协议,深度好文
  5. C语言代码规范(五)函数参数个数
  6. flutter怎么添加ios网络权限_视频号直播间怎么添加购物车商品;超详细流程步骤。丨国仁网络资讯...
  7. Ubuntu14.04下安装Samba
  8. mysql url认证_Springboot+shiro基于url身份认证和授权认证
  9. exe电子书转换txt 下载_网站能经常看到的主流电子书格式
  10. 有什么软件可以测试win10电脑性能,微软能否翻盘 Win10系统4K高分优化实测
  11. [转]asp.net webform 与mvc 共享session
  12. Java eclipse: errors exist in required project(s)
  13. varchar和varchar2的联系与区别
  14. 通用管理系统概要设计说明书
  15. word2003流程图变成图片_怎样将word文档的部分内容(流程图)制作成图片 详细始末...
  16. 云原生与业务可观测性
  17. Android解决Could not find manifest-merger.jar问题
  18. linux下删除以-开头的文件
  19. JDK、JER、JVM三者间的联系与区别
  20. 浙江大学 计算机学院 三位一体,浙江大学三位一体招生

热门文章

  1. 6.10初步建立项目
  2. 深度|下一家BAT长这样(二)
  3. 交换排序(冒泡排序、快速排序)
  4. android 涨潮动画加载_My Tide Times(潮汐数据查看器)
  5. 2023 开源 智慧停车场微信小程序前后端源码
  6. 动态规划9:马尔可夫决策过程
  7. mysql 5.6 全文索引_MySql5.6全文索引 及 5.7 中文索引插件ngram
  8. 【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码
  9. ttfb时间过长问题
  10. 男女友测试题软件,抖音2020男朋友测试题