zoukankan      html  css  js  c++  java
  • 007.PGSQL-python读取txt文件,将数据转化为dataFrame,dataFrame数据插入到pgsql; dataframe去掉索引,指定列为索引;python读取pgsql数据,读取数据库表导成excel

    python读取txt文件,将数据转化为dataFrame,dataFrame数据插入到pgsql

    1. pd.io.sql.to_sql(dataframe,'table_name',con=conn,schema='w_analysis',if_exists='append')

    2.df.to_sql('test0001', engine,schema='ioc_dw_second', if_exists='append', index=False) #增量入库

    dataframe去掉索引,指定列为索引

    #指定某一列为索引
    df.set_index('rid',inplace=True)

    1. 方法1

    import numpy as np
    import pandas as pd
    from sqlalchemy import create_engine
    
    #查看文件
    list(open('C:/Users/James Murray/Desktop/test0001.txt'))
    
    #读取txt 
    df_news = pd.read_table('C:/Users/James Murray/Desktop/test0001.txt',sep='s+')
    df=pd.DataFrame(df_news)
    #指定某一列为索引
    df.set_index('rid',inplace=True)
    df
    # 初始化引擎
    connect = create_engine('postgresql+psycopg2://'+'yonghu'+':'+'mima'+'@ip'+':'+str(duankou) + '/' + 'kuming')
    # 写入数据 
    pd.io.sql.to_sql(df,'test0001',connect,schema='ioc_dw_second', if_exists='append')
    connect.dispose()

    2. 方法2  

    if_exists='replace' #覆盖入库
    if_exists='append'  #增量入库
    import pandas as pd
    from sqlalchemy import create_engine
    
    df_news = pd.read_table('C:/Users/James Murray/Desktop/test0001.txt',sep='s+')
    df=pd.DataFrame(df_news)
    #指定某一列为索引
    df.set_index('rid',inplace=True)
    df
    engine = create_engine('postgresql+psycopg2://' + 'yonghu' + ':' + 'mima' + '@' + 'ip' + ':' + str(duankou) + '/' + 'kuming')
    
    
    # 配合pandas的to_sql方法使用十分方便(dataframe对象直接入库)
    #df.to_sql(table, engine, if_exists='replace', index=False) #覆盖入库
    # index=False ,索引行不插入表
    df.to_sql('test0001', engine,schema='ioc_dw_second', if_exists='append', index=False)  #增量入库

    附 :读取数据1

    from string import Template
    import numpy as np
    import pandas as pd
    from sqlalchemy import create_engine
    
    #创建连接引擎
    engine = create_engine('postgresql+psycopg2://' + 'yonghu' + ':' + 'mima' + '@' + 'xx.xx.xx.xx' + ':' + str(duabkou) + '/' + 'kuming')
    
    #sql语句
    =====================================
    query_sql = """
           select * from ioc_dw_second.$arg1
           """
    =====================================
    
    query_sql = Template(query_sql) # template方法 字符串格式化
    
    #表名
    tablename = 'test0001'
    df1 = pd.read_sql_query(query_sql .substitute(arg1=tablename),engine) # 配合pandas的方法读取数据库值
    df1

    附 :读取数据2

    import psycopg2
    import openpyxl
    
    conn = psycopg2.connect(database='xx',user='xxx',password='xx',host='xx.xx.xx.xx',port='xxx')
    
    cur= conn.cursor()
    cur.execute("select database_name,proc_name,proc_detail from ioc_ods.ud_ioc_proc_beifen limit 1" )
    rows = cur.fetchall()
    
    for row in rows:
        print("database_name = ",row[0])
        print("proc_name = ",row[1])
        print("proc_detail = ",row[2])
    print("operation done succcessful") 
    conn.close()

    python读取pgsql数据,读取数据库表导成excel

    # encoding:utf-8
    import psycopg2
    import openpyxl
    from datetime import datetime
    
    def database_excel():
        # 建立数据库连接
        conn = psycopg2.connect(database='kuming',user='yonghu',password='mima',host='ip',port='duankou')
        # 读取数据
        cur= conn.cursor()
        sql = '''
            SELECT  nspname ,proname  , prosrc , CURRENT_TIMESTAMP as update_time 
            FROM    pg_catalog.pg_namespace n 
            JOIN    pg_catalog.pg_proc p 
            ON      pronamespace = n.oid 
            WHERE   nspname in (     
                'ioc_ods',  'ioc_support','ioc_standard','ioc_dm','ioc_dw','ioc_theme'  
            )order by nspname
        '''
        cur.execute(sql) 
        rows = cur.fetchall()
    
        wb = openpyxl.Workbook()
        wb.create_sheet('SHEET1',0)
        sheet = wb.get_sheet_by_name("SHEET1")
    
        today = datetime.today()
        today_date = datetime.date(today)
    
        myAlphbet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    
        # 各列对应
        column_name = ['库名','存储过程名称', '存储过程','更新时间']
        path = 'E:\龙岗IOC10.101.27.15PGsql存储过程备份\备份proc\'
        # 列名
        for i in range(len(column_name)) :
            loc = myAlphbet[i]+str(1)
            sheet[loc] = column_name[i]
    
        for i in range(len(rows)) :
            for j in range(len(rows[i])):
                loc = myAlphbet[j]+str(i+2)
                sheet[loc] = rows[i][j]
    
        wb.save(path+'SHEET'+'_'+str(today_date)+'.xlsx')
    
    if __name__ == '__main__':
    
        database_excel()
    
        print("succeed")

    当我们利用pandas处理完数据后,有时可能需要将处理好的数据保存到数据库中,这时需要利用sqlalchemy。
    SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。
    利用sqlalchemy,可以讲pandas类型的格式数据保存到数据库中,但是在使用过程中还是有很多坑的,下面简单介绍一下如何使用:
    1:
    import pandas as pd
    from sqlalchemy import create_engine
    导入模块中的create_engine,需要利用它来进行连接数据库
    2:
    conn = create_engine('mysql+mysqldb://root:123456@localhost:3306/w_analysis?charset=utf8')
    创建连接,利用create_engine
    3:
    pd.io.sql.to_sql(dataframe,'table_name',con=conn,schema='w_analysis',if_exists='append')
    利用pd的io中的sql的to_sql方法进行导入(记住不是pd的to_sql)
    4:
    conn.dispose()
    关闭连接
    create_engine参数说明:
    (mysql+mysqldb://用户名:密码@localhost:端口/数据库名?编码)? ? 设置数据库的编码方式,可以防止latin字符不识别而报错
    to_sql参数说明:
    (数据, '表名', con=连接键, schema='数据库名', if_exists='操作方式')? ? 操作方式有append、fail、replace
    append:如果表存在,则将数据添加到这个表的后面
    fail:如果表存在就不操作
    replace:如果存在表,删了,重建
    !!!这里提醒一下可能出现的错误:
    ModuleNotFoundError: No module named 'MySQLdb'请看这里
    注:pd 1.9以后的版本,除了sqllite,均需要通过sqlalchemy来设置

  • 相关阅读:
    将model注册进单例中,每次用的时候从单例里面取
    构建ASP.NET MVC4&JQuery&AJax&JSon示例
    ajax用法
    MVC 后台向前台传值,同一Controller下Action之间的传值,Controller与Controller之间的传值
    mvc5入门指南
    在EF中做数据索引
    json to Object
    ajax请求后返回的时间转换格式
    Target JRE version (1.8.0_101) does not match project JDK version (unknown), will use sources from JDK: 1.8
    Idea 配置启动JDK___在windows中使用Intellij Idea时选择自定义的64位JVM
  • 原文地址:https://www.cnblogs.com/star521/p/13393362.html
Copyright © 2011-2022 走看看