#快速导入数据到postgresql
import pandas as pd
import psycopg2
from io import StringIO
def sql_to_df():
con=pymysql.connect(**conf["mysql_form"])
sql="select category_id,name,gameid,img_url from category where category_id in (11665,9653,6504) "
try:
with con.cursor() as cur:
cur.execute(sql)
datas=cur.fetchall()
finally:
con.close()
df=pd.DataFrame(list(datas))
return df
def df_to_pg(df=None,db="spider",table='price_730'):
#这里生成的StringIO类似于file文件,可read,可write,不同的是file是在硬盘上的文件,而StringIO是在内存中的文件
output=StringIO()
#也可以直接将字符串转换成内存文件 ,
#将数据保存到‘文件’
if not df :
df=sql_to_df()
df.to_csv(output,sep='\t',index=False,header=False)
#使文件定位到第一个字符
output.seek(0)
try:
conn=psycopg2.connect(database=db,**conf["postgres"])
cur=conn.cursor()
cur.copy_from(output,table,null='')
conn.commit()
result=cur.rowcount
finally:
cur.close()
conn.close()
return res