很多Python初学者都会遇到一个问题,数据库连不上。我见过不少人在这一步卡住好几天。
今天直接说5种常见的连接方式。每种我都会讲它的真实使用场景。
第一种,sqlite3。简单到不用装任何东西。
Python自带这个模块。你只需要一行import就能用。适合做本地小工具,存几百条数据。我现在还用它记个人账单。
但请注意,它不支持并发访问。多个程序同时写同一个文件会报错。
第二种,mysql-connector-python。官方出的驱动。
安装有点慢,但胜在稳定。大厂项目喜欢用这个。写法很标准,select完要记得close。我教学生时,总让他们记住一个原则:用完数据库就要关连接。
配置参数比较多,host, user, password, database一个不能少。新手容易把端口号写错。
第三种,PyMySQL。纯Python实现。
如果你公司的服务器不能装C扩展,这个是最好的选择。它跟mysql-connector语法很像。换起来不费劲。
我见过有人在Docker里用这个,跑得很顺。但它速度比官方驱动慢10%左右。日常开发感觉不到差别。
第四种,SQLAlchemy。把SQL写成Python代码。
这个不是驱动,是ORM框架。它帮你把数据库的表变成Python对象。你写session.query(User).all()就能查数据。
适合复杂业务。它的好处是换数据库不用改代码。今天用SQLite,明天换MySQL,只需要改一行连接字符串。
学习成本高,很多人学了一个月还写不好关联查询。如果你只是做简单报表,别用它。
第五种,asyncpg。异步驱动,性能之王。
你打开浏览器,同时请求一个网页。这个连接方式能让数据库同时处理成百上千个请求。
用普通方式,一个请求等5秒,100个请求就要等到天荒地老。用asyncpg,100个请求几乎是同时返回。
它只支持PostgreSQL。写法跟普通Python不一样,要用async和await。上手有点别扭,习惯了就回不去了。
我有个学生用这个写了个爬虫调度系统,每天处理50万条数据,内存占用不到300MB。换其他方式,同样数据量机器早就报警了。
选哪种主要看你项目需求。本地小工具用sqlite3。公司业务用mysql-connector。要求高并发的PostgreSQL项目,直接上asyncpg。
别贪多。先掌握一种,用到能闭着眼睛写出来。其他方式自然就会触类旁通。