Python 如何从包含CSV数据的ResultProxy对象检索数据帧?

Python 如何从包含CSV数据的ResultProxy对象检索数据帧?,python,pandas,dataframe,sqlalchemy,Python,Pandas,Dataframe,Sqlalchemy,我有一个数据帧对象,我首先将其转换为CSV: valsCSV = vals.to_csv() #where vals is a dataframe with a single row 然后,我使用SQLAlchemy将此VALSV插入到表的“userdata”列中,如下所示: sqlStatement = "INSERT INTO "+ tablename + "(username, userdata) VALUES ('"+testName+"', '"+ valsCSV +"')" con

我有一个数据帧对象,我首先将其转换为CSV:

valsCSV = vals.to_csv() #where vals is a dataframe with a single row
然后,我使用SQLAlchemy将此VALSV插入到表的“userdata”列中,如下所示:

sqlStatement = "INSERT INTO "+ tablename + "(username, userdata) VALUES ('"+testName+"', '"+ valsCSV +"')"
connection.execute(sqlStatement)
sqlStatement = "SELECT userdata FROM " + tablename + " WHERE username='" + username +"';"
rs = dbConnection.execute(sqlStatement) #where rs will be a ResultProxy object
然后,为了检索数据,我执行一个查询,返回ResultProxy对象,如下所示:

sqlStatement = "INSERT INTO "+ tablename + "(username, userdata) VALUES ('"+testName+"', '"+ valsCSV +"')"
connection.execute(sqlStatement)
sqlStatement = "SELECT userdata FROM " + tablename + " WHERE username='" + username +"';"
rs = dbConnection.execute(sqlStatement) #where rs will be a ResultProxy object
目的是在检索ResultProxy对象并获得初始数据帧后反转此过程


备注:开始时,我使用一行数据框的原因是解决方案特定。

一旦从查询中获取CSV字符串,您可以使用
io.StringIO
获取
pd.read\u CSV
将其转换回数据框:

import pandas as pd
from io import StringIO

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
res = df.to_csv(None, index=False)

df2 = pd.read_csv(StringIO(res))
print(df2)
收益率:

   a  b
0  1  4
1  2  5
2  3  6

从查询中获取CSV字符串后,可以使用
io.StringIO
获取
pd.read\u CSV
将其转换回数据帧:

import pandas as pd
from io import StringIO

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
res = df.to_csv(None, index=False)

df2 = pd.read_csv(StringIO(res))
print(df2)
收益率:

   a  b
0  1  4
1  2  5
2  3  6

虽然我找到了一个适合我的场景的不同解决方案,但我将对此进行投票,因为这是一个可行的解决方案。起初我确实尝试过这种方法,但如果没有按如下方式将行条目编入索引,我似乎无法使其工作:retrievedString=rs[I][0]35;其中我是行索引,然后我按照建议继续使用read_csv(StringIO(res))(我为另一个我现在找不到的问题找到了类似的解决方案)。如果你是那个提出解决方案的人,我就投赞成票。如果你认为这是一个潜在的重复,让我知道,我会删除这个。虽然我想出了一个不同的解决方案,适用于我的场景,我会投票,因为这是一个可行的解决方案的问题。起初我确实尝试过这种方法,但如果没有按如下方式将行条目编入索引,我似乎无法使其工作:retrievedString=rs[I][0]35;其中我是行索引,然后我按照建议继续使用read_csv(StringIO(res))(我为另一个我现在找不到的问题找到了类似的解决方案)。如果你是那个提出解决方案的人,我就投赞成票。如果你认为这是一个潜在的重复,让我知道,我会删除这个。