Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql返回通常不是“PANDAS”的多行表_Pandas_Postgresql_Dataframe - Fatal编程技术网

postgresql返回通常不是“PANDAS”的多行表

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

我正在从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) 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类型的对象,而不是扩展的多列格式