如何从数据库游标描述初始化带列名的Polars DataFrame?
直接从psycopg2游标初始化Polars DataFrame
问题场景
我使用psycopg2连接PostgreSQL数据库,通过游标获取记录及列名的代码如下:
rds_conn = psycopg2.connect( host=config.RDS_HOST_NAME, database=config.RDS_DB_NAME, user=config.RDS_DB_USER, password=config.RDS_DB_PASSWORD, port=config.RDS_PORT) cur = rds_conn.cursor() cur.execute(sql_query) names = [x[0] for x in cur.description] rows = cur.fetchall() cur.close()
目前我是通过cursor.description获取的列名来初始化Pandas DataFrame:
df = pd.DataFrame(rows, columns=names)
现在想跳过Pandas,直接用cursor.description的列名初始化Polars DataFrame,尝试用polars.DataFrame.with_columns没成功,求解决方法。
解决方案
方法1:基于已获取的rows和列名构造
Polars的DataFrame构造函数支持通过schema参数指定列名,用法和Pandas类似,直接传入已获取的rows和names即可:
import polars as pl df = pl.DataFrame(rows, schema=names)
方法2:直接从数据库/游标读取(推荐)
不需要手动调用fetchall加载全量数据到内存,Polars提供了read_database方法可以直接从数据库连接或已执行的游标读取数据,自动识别列名,效率更高:
import polars as pl # 方式1:直接传入SQL语句和数据库连接 df = pl.read_database(sql_query, rds_conn) # 方式2:从已执行的游标读取(适合已经执行过cur.execute的场景) cur.execute(sql_query) df = pl.read_database("", cur)
内容的提问来源于stack exchange,提问作者Balaji Venkatachalam
相关产品推荐
相关产品推荐

