Pandas连接外部数据库导入数据,是一个很实用的功能,能让你把数据库里的表直接变成DataFrame来分析,下面我直接讲讲步骤和需要注意的地方。
第一步:准备好"桥梁" Pandas自己不能直接和数据库对话,需要借助一个叫做"数据库驱动"的桥梁,不同的数据库,用的桥梁也不同,你得像装其他Python库一样,先用pip命令把它们装好。
- 如果是MySQL 数据库,常用的驱动是
pymysql 或mysql-connector-python。 - 如果是PostgreSQL 数据库,常用的是
psycopg2。 - 如果是SQLite数据库,Python自带支持,不需要额外安装。
- 如果是SQL Server 数据库,可以用
pyodbc或pymssql。 你根据自己用的数据库类型,选一个安装就行,比如连MySQL,你就在命令行里输入pip install pymysql。
第二步:建立连接 桥有了,接下来就得铺路,也就是建立连接,你需要创建一个"连接字符串",告诉Pandas数据库在哪、怎么登录,这里会用到另一个库 sqlalchemy 来创建这个连接引擎,它非常通用,通常的格式是: 数据库类型+驱动://用户名:密码@服务器地址:端口/数据库名 举个例子,如果你用MySQL和pymysql驱动,代码大概长这样:

Python
from sqlalchemy import create_engine
# 替换成你自己的信息
engine = create_engine('mysql+pymysql://用户名:密码@localhost:3306/数据库名')
这里 localhost 是指数据库在你本机上,如果是远程服务器,就换成它的IP地址。3306 是MySQL默认的端口号。
第三步:编写查询并导入数据 路铺好了,就可以派Pandas去取数据了,主要用 pandas.read_sql() 这个函数,它有两种主要用法:
-
导入整张表 :如果你想要整张表,直接写表名就行。
Python
import pandas as pd df = pd.read_sql('你的表名', con=engine) -
导入查询结果 :更多时候,我们只需要一部分数据,或者需要关联多张表,那就写完整的SQL查询语句。
Python
sql_query = 'SELECT 列1, 列2 FROM 表名 WHERE 条件' df = pd.read_sql(sql_query, con=engine)执行这行代码后,查询结果就会变成一个Pandas的DataFrame,你可以像处理其他数据一样,随意分析了。

第四步:记得关门 数据取到手后,一个好习惯是主动把数据库连接关掉,释放资源,虽然有时候程序结束会自动关,但显式地关闭更稳妥。
Python
engine.dispose()
需要注意的几个关键点:
-
安全第一,别把密码写在代码里 :上面例子为了清楚,直接把密码写出来了,这在真实项目里是大忌 ,万一代码泄露就很危险,正确的做法是把密码、用户名这些敏感信息放在环境变量或者单独的配置文件里,代码中去读取,比如用
os.getenv('DB_PASSWORD')来获取。
-
查询要"精打细算",别拖垮数据库 :用
SELECT * FROM 大表这种语句要非常小心,如果表特别大,一下子全拉到你电脑内存里,可能会让内存爆掉,也可能让数据库服务器压力骤增,最好在SQL里就利用WHERE条件过滤,或者用LIMIT先限制条数看看,Pandas的read_sql还有一个chunksize参数,可以分批读入大数据,像流水一样处理,不会一下子占满内存。 -
注意数据类型转换 :数据库里的数据类型(比如日期、时间戳、十进制小数)被读到DataFrame里时,Pandas会尽力转换成自己对应的类型,但有时可能不准,特别是日期时间,读进来后最好用
pd.to_datetime()检查确认一下,数字的精度也要留意。 -
连接失败怎么办:如果连不上,要一步步排查:驱动装对了吗?连接字符串的拼写(比如冒号、斜杠)对吗?用户名密码对吗?数据库服务器的地址和端口能通吗?数据库是否允许远程连接(如果用的是远程服务器)?防火墙设置有没有挡住端口?这些都是在实际操作中常会遇到的问题。
-
复杂查询先在数据库工具里测试:在把SQL语句写到Python代码之前,建议先在数据库自带的管理工具(比如MySQL Workbench、pgAdmin等)里把SQL跑一遍,确认语法正确、结果符合预期,这样能避免很多不必要的调试。
核心步骤就是:装驱动 -> 用sqlalchemy建连接 -> 用read_sql写查询导入 -> 关连接 ,过程中时刻想着安全 、效率 和数据准确性这几点,多练几次,遇到问题查查文档(Pandas官方文档和所用数据库驱动的文档是主要参考来源),慢慢就熟练了。