使用asyncpg读取PostgreSQL表

bsxbgnwa  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(121)

我知道如何读取远程服务器中的PostgreSQL表与psycopg2,sqlalchemy,dask,但我不满意的处理时间来读取表,并开始研究更快的替代方案,我发现asyncpg作为7倍以上的速度比所有,但文件asyncpg是非常差的相比,上述库有大量的例子在那里。
我的问题是:如何有效地读取PostgreSQL表?
我试了如下:

import asyncio
import asyncpg
import pandas as pd

from sshtunnel import SSHTunnelForwarder #Allow connection with SSH like PuttY connection
from sshtunnel import SSHTunnelForwarder, create_logger #Allow to follow the processes running

SSHTunnelForwarder(('IP_detail', Port_number),
        ssh_private_key=r'path_to_the_ssh_key_in_my_computer',

        ssh_username="username",
        #ssh_password="password", 
        remote_bind_address=('localhost', port_number),
        local_bind_address=('localhost', port_number),
        logger=create_logger(loglevel=1) #Makes processes being ran displayed
                           )

conn = await asyncpg.connect(user='username', password='password',
                                 database='database_name', host='127.0.0.1', port='port')

values = await conn.fetch('''SELECT * FROM table_name''')

values=pd.DataFrame(values)
values

用上面的代码我得到了PostgreSQL表的所有行的值,但是没有显示列名,它显示的是列编号而不是它们的正确名称。如何纠正这个问题?

siotufzp

siotufzp1#

使用dict(values)查看记录和有效负载的键值对

zzoitvuj

zzoitvuj2#

首先,提取列名:

columns = [c.name for c in values.get_attributes()]

然后,创建 Dataframe :

values = pd.DataFrame(values, columns=columns)

请访问https://github.com/MagicStack/asyncpg/issues/173#issuecomment-538055841

相关问题