You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MongoDB查询生成的Python列表转为多列Pandas DataFrame并存库?

把MongoDB查询结果转换为Pandas DataFrame并写入关系型数据库

嗨,这个需求其实非常好解决,Pandas和相关工具已经帮我们把流程简化得很清晰了,我来一步步拆解给你:

第一步:将MongoDB返回的列表转换为DataFrame

你的documents列表里每个元素都包含一个person字典,我们只需要把这些字典提取出来,就能直接转换成符合要求的DataFrame。这里有两种常用方法:

方法1:手动提取字典列表

这种方法直观易懂,适合结构简单的场景:

import pandas as pd

# 遍历documents,提取每个元素里的person字典
person_records = [doc['person'] for doc in documents]
# 转换为DataFrame
df = pd.DataFrame(person_records)
# 把列名改成大写,匹配你想要的传统数据库格式
df.columns = df.columns.str.upper()

方法2:使用pd.json_normalize处理嵌套结构

如果你的数据有更复杂的嵌套层级,json_normalize会更灵活,这里也能直接用:

import pandas as pd

# 直接指定从'person'路径提取数据,自动展开为列
df = pd.json_normalize(documents, record_path='person')
# 统一列名为大写
df.columns = df.columns.str.upper()

执行完上面任意一种方法后,你就能得到和示例一致的DataFrame:

PHONENAMEAGE
3368988989898989898PABLO27
335...PEDRO32

第二步:将DataFrame写入关系型数据库

Pandas的to_sql方法可以直接把DataFrame写入数据库,不过需要配合SQLAlchemy的引擎来使用,以下是针对常见数据库的示例:

前置准备

首先安装必要的依赖:

  • 如果你用MySQL:pip install pymysql sqlalchemy
  • 如果你用PostgreSQL:pip install psycopg2-binary sqlalchemy
  • 如果你用SQL Server:pip install pyodbc sqlalchemy

写入数据库的代码示例(以MySQL为例)

from sqlalchemy import create_engine

# 创建数据库连接引擎,格式为:数据库类型+驱动://用户名:密码@主机地址:端口/数据库名
engine = create_engine('mysql+pymysql://your_username:your_password@localhost:3306/your_database_name')

# 将DataFrame写入数据库表
df.to_sql(
    name='persons_table',  # 要写入的数据库表名
    con=engine,            # 连接引擎
    if_exists='replace',   # 表存在时的处理:replace=替换,append=追加,fail=报错
    index=False            # 不把DataFrame的索引作为数据库列
)

一些注意事项

  • 字段兼容性:如果你的phone字段是超长字符串(比如示例里的长数字串),要确保数据库表中对应的字段类型足够容纳(比如MySQL用VARCHAR(255)或TEXT),避免数据截断。
  • 数据完整性:如果documents里存在没有person键的元素,建议先过滤再转换,比如:person_records = [doc['person'] for doc in documents if 'person' in doc],防止出现KeyError。
  • 性能优化:如果数据量极大,可以分批次写入数据库,通过chunksize参数设置每批次的行数,避免内存溢出。

内容的提问来源于stack exchange,提问作者Pablo Brenner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:19:50