DataFrame:postgresql数据下载及上传

news/2024/7/9 21:52:17 标签: postgresql, 数据库, python
python">import pandas as pd
import numpy as np
import re
import psycopg2
from sqlalchemy import create_engine

1. 连接数据库,下载所需数据

python">def download_sqlfile(sql_file):
    """
    连接数据库,下载所需数据
    """
    # 建立数据库连接
    con = psycopg2.connect(database="warehouse", user="XXXX", password="XXXXX", host="XX.XX.cn", port="5432")
    # 调用游标对象
    cur = con.cursor()

    # 执行语句,下载数据
    sql_command = "select * from %s"%sql_file # 
    # 获取数据
    # 由于数据库首次运行容易丢失连接,需两次重复运行
    try:
        data = pd.read_sql(sql_command, con,params=(sql_file,))
        print('连接数据库成功')
    except:
        print('首次连接数据库失败,尝试第二次连接数据库')
        data = pd.read_sql(sql_command, con,params=(sql_file,))
        print('连接数据库成功')
    
    # 关闭数据库连接关闭游标
    cur.close()
    con.close()
    
    return data

读取示例

python"># 读取10月数据
sql_file_10 = 'staging_sy_data.bt_51job_2023102008_20231016143722'
df_10 = download_sqlfile(sql_file_10)

2. 数据上传到数据库

python"># 数据上传到数据库
def upload_table(table_name, table):
    """
    将本地Dataframe存储到数据库中
    """
    # 数据库连接信息 database="warehouse", user="XX", password="XXX", host="XX.XX.cn", port="5432")
    db_connection = {
        'host': 'XX.XX.cn',
        'port': '5432',
        'dbname': 'warehouse',
        'user': 'XXX',
        'password': 'XXXXX'
    }

    # 创建数据库引擎
    engine = create_engine('postgresql+psycopg2://{user}:{password}@{host}:{port}/{dbname}'.format(**db_connection))
    
    # 将本地Dataframe存储到数据库
    with engine.connect() as conn:
        print(bool(conn))
        
        table.to_sql(name = table_name, con = engine, schema = 'staging_data_sy') # 注意此处to_sql需要使用sqlalchemy 包的 create_engine;数据库链接只能用engine不能使用
        
#     table.to_sql(table_name, engine, if_exists='replace', index=False)
    
    print('表格上传成功')
    
    return None

数据上传示例:

python"># 将data存储到数据库
table_name = 'bt_51job_chengdu_202310'
try:
    upload_table(table_name, df_chengdu)
except:
    print('第一次上传失败,正在进行第二次上传...')
    upload_table(table_name, df_chengdu)

http://www.niftyadmin.cn/n/5445914.html

相关文章

Avl 平衡二叉树 概念与代码实现

概念: 二叉树存在值顺序插入导致树高度过大的问题、平衡二叉树通过旋转的方式、使二叉树处于平衡状态、子树高度差不能大于1 旋转规则: 左子树高右旋、右子树高左旋 右旋时插入节点在最右、则子树先左旋 左旋时插入节点在最左、则子树先右旋 代码实现: package com.info.data…

51单片机入门:定时器

定时器的介绍 定时器:51单片机的定时器属于单片机的内部资源,其电路的设计连接和运转均在单片机内部完成。根据单片机内部的时钟或者外部的脉冲信号对寄存器中的数据加1,定时器实质就是加1计数器。因为又可以定时又可以计数,又称…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节,范围是0到65535.如…

Java NIO和IO之间的区别

前言 NIO(New IO),这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出…

JavaSE(异常的体系结构)

1. 异常的体系结构 Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception。 Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:Stack…

绿色节能|AIRIOT智慧建材能耗管理解决方案

建材供应是建筑业不可或缺的一个重要环节,在环保和企业可持续发展的双重需求下,建材生产商对建材生产过程中的能耗掌握和能耗管理尤其关注。但在实际生产和运营过程中,传统的建材能耗管理方式往往存在如下痛点: 用户管理权限不完善…

Echarts 利用多X轴实现未来15天天气预报

Echarts 利用多X轴实现未来15天天气预报 UI 设计图 Echarts 实现效果 代码实现 代码分解 echarts 图表上下均显示数据 通过设置 grid.top 和 grid.bottom 设置白天和夜间天气展示区域 grid: {top: 36%,bottom: 36%,left: 5%,right: 5%}, 天气图标的设置 由于 axisLabel 的…

实现节流防止连点方法以及调用方式

1、新建throttle.js文件,复制该代码 export function throttle(fn, delay) { let latestTime 0 return function() { const _this this const _arguments arguments const nowTime new Date().getTime() if (nowTime - latest…