postgresql返回通常不是“PANDAS”的多行表
我正在从mysql迁移到postgresql,并且postgresql函数的输出有问题。在mysql中,它返回数据元组,但postgresql返回字符串列表 要模拟问题,请执行以下操作:postgresql返回通常不是“PANDAS”的多行表,pandas,postgresql,dataframe,Pandas,Postgresql,Dataframe,我正在从mysql迁移到postgresql,并且postgresql函数的输出有问题。在mysql中,它返回数据元组,但postgresql返回字符串列表 要模拟问题,请执行以下操作: CREATE TABLE public.dummy ( id1 integer, id2 integer, label text COLLATE pg_catalog."default" ) INSERT INTO public.dummy(id1, id2, label) VALUE
CREATE TABLE public.dummy
(
id1 integer,
id2 integer,
label text COLLATE pg_catalog."default"
)
INSERT INTO public.dummy(id1, id2, label) VALUES (1, 2, 'a');
INSERT INTO public.dummy(id1, id2, label) VALUES (2, 3, 'b');
INSERT INTO public.dummy(id1, id2, label) VALUES (3, 4, 'c');
CREATE FUNCTION public."test"(IN id integer)
RETURNS TABLE
(id1 integer,
id2 integer,
label text)
LANGUAGE 'sql'
AS $BODY$
SELECT * from dummy;
$BODY$;
使用psycopg2和pandas创建简单连接
sqlconn="postgresql+psycopg2://" + user + ":" + password + "@"+ host + ":"+str(port)+"/" + db
engine = sqlalchemy.create_engine(sqlconn,encoding='utf8')
conn=engine.connect()
result=conn.execute('select test(1)')
resultset=result.fetchall()
这将产生
[('(1,2,a)',), ('(2,3,b)',), ('(3,4,c)',)]
皈依熊猫
pd.DataFrame(resultset)
屈服
0
0 (1,2,a)
1 (2,3,b)
2 (3,4,c)
我想要的是输出
pd.read_sql('select * from dummy',conn)
id1 id2 label
0 1 2 a
1 2 3 b
2 3 4 c
我不能一直使用read_-sql方法,因为很多函数太复杂,无法放入字符串中,我在使用MySQL/MariaDB时从未遇到过这个问题
有人遇到过这个问题吗?您想从测试1中选择*而不是选择测试1。当您选择test1时,它可能只返回一列,因为您只选择了一列,所以它将每个表行打包为一个RECORD类型的对象,而不是扩展的多列格式