如何将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:
| PHONE | NAME | AGE |
|---|---|---|
| 3368988989898989898 | PABLO | 27 |
| 335... | PEDRO | 32 |
第二步:将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
相关产品推荐
相关产品推荐

