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來設置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM