如何在sql中使用数据框到数据库?

2024-06-02 05:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在scrape运行时附加scrape数据。你知道吗

一些列包含多个字符串的数组,这些字符串将被保存,并在刮取之后被后置处理为假人。 e、 g tags=array(['tag1','tag2'])

但是,对数据库的写入和读取对数组不起作用。你知道吗

我尝试了不同的存储方法,csv,pickling,HDF,所有这些都不起作用,原因各不相同。 (主要是附加到中央数据库和像字符串一样存储列表的问题)。 我还尝试了不同的数据库格式(mysql和postgres),我尝试了使用dtype数组,但是这需要一个固定长度(事先知道)的数组。。你知道吗

从我收集的信息来看,我可以走JSON路线或pickle路线。 我选择pickle路由,因为我不需要db来处理数组的内容。你知道吗


from sqlalchemy.types import PickleType

df=pd.DataFrame([],columns=['Name','Tags'])
df['Price'] = array(['tag1','tag2'], dtype='<U8')

type_dict = {'Name': String ,'Tags': PickleType}

engine = create_engine('sqlite://', echo=False)

df.to_sql('test', con=engine, if_exists='append', index=False, dtype=type_dict)

df2=pd.read_sql_table('test' ,con =engine)

预期产量:

df2['Tags'].values
array(['tag1','tag2'], dtype='<U8')

实际输出:

df2['Tags'].iloc[0] 
b'\x80\x04\x95\xa4\x00\x00\x00\x00\x00\x00\x00\x8c\x15numpy.core.multiarray\x94\x8c\x0c_reconstruct\x94\x93\x94\x8c\x05numpy\x94\x8c\x07ndarray\x94\x93\x94K\x00\x85\x94C\x01b\x94\x87\x94R\x94(K\x01K\x01\x85\x94h\x03\x8c\x05dtype\x94\x93\x94\x8c\x02U8\x94K\x00K\x01\x87\x94R\x94(K\x03\x8c\x01<\x94NNNK K\x04K\x08t\x94b\x89C \xac \x00\x00\xac \x00\x00 \x00\x00\x00-\x00\x00\x00 \x00\x00\x00\xac \x00\x00\xac \x00\x00\xac \x00\x00\x94t\x94b.'

所以在酸洗过程中出了点问题,我想不出是什么。你知道吗

编辑: 好吧,那么np.荷载(df2['Tags'].iloc[0])返回原始数组。有没有办法把这个传递给read\u sql\u表?这样我就可以立即得到“原始”数据帧了?你知道吗

因此,问题发生在读取过程中,数组被pickle,但它们不会作为pickle数据自动读回。没有办法传递数据类型来读取\u sql\u表,对吗?你知道吗


Tags: 数据字符串sqltags数组arraypickleengine