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来设置