如何使用Python3.4连接MySQL

结论:使用pymysql代替mysqldb。

步骤: 1 、下载pymysql。
2 .解压到盘符。
3 . 在命令行上运行 python setup.py install。

代码: 蟒蛇 导入pymysql 尝试: conn = pymysql.connect(host='localhost', user='root', passwd='qin', db='person', port=3 3 06 , charset='utf8 ') cur = conn.cursor() cur.execute('从人中选择') 数据 = cur.fetchall() 对于数据中的 d: print("身份证号:" + str(d[0]) + "姓名:" + d[1 ] + "性别:" + d[2 ]) cur.close() conn.close() 除异常: print("发生异常")
注意:
charset='utf8 ' 避免中文乱码。

使用decode('utf-8 ')进行中文处理。

MySQL如何与Python实现高效数据交互 MySQL连接Python的ORM框架对比与实战

说白了,用Python高效运行MySQL的关键是:首先控制连接池不要随意打开,正确编写SQL语句,不要一次拉取所有数据,在正确的地方使用ORM。

首先我们来说说主要的连接池。
去年我们做百万用户项目的时候,直接使用MySQL-Connector-Python来打开连接。
每次我们插入数据时,它都会严重挂起。
后来我切换到 DBUtils 单例池,5 00 个并发速度非常快 - 但要注意不要随机化池大小。
我最初将其设置为 3 00,但系统 CPU 上升到 8 0%。
后来调整到1 00才稳定。
另一点:虽然 PyMySQL 很快,但有一个关键细节:它的游标默认是缓冲的。
当处理大表时,内存立即爆炸。
您需要使用“cursor=conn.cursor(buffered=False)”来更改它。

还有一个细节非常重要,就是SQL优化。
去年,一位同学写了一个批量插入,并循环运行一次。
结果,他被运维谩骂。
使用executemany()可以节省一半的时间,但要求是数据量不要太大。
例如,我们的测试发现,大于3 000的数据量不如批量插入效率高。
不用担心索引。
过去有一个项目,全表扫描降低了整个公司的速度。
添加INDEX(name)直接提升了9 0%的速度。
用技术术语来说,这称为雪崩效应。
事实上,前线的一个小延误让一切都恢复了。

最初我以为Peewee比SQLAlchemy简单很多,但是我发现Peewee在处理相关查询时实际上生成了更多的SQL。
后来我改用SQLAlchemy,性能有所提高。
不过,Peewee确实有一个优势。
适合快速开发。
例如,上个月我们设计了一个营销活动原型,花了两个小时才与 Peewee 上线。
SQL写了半天才完成。

等等,还有一件事我差点忘了——安全。
一个项目被黑了,因为参数没有使用通配符,直接使用F字符串拼出用户在SQL中输入的内容。
说实话,那是相当困难的。

建议先进行压力测试,确定数据量,然后根据团队情况选择方案。
不要迷信ORM的万能。
对于一些分页查询和数据流处理,手写SQL是最方便的。

解决Python mysqlclient 安装中的 mysql.h 缺失问题

说实话,这个mysqlclient安装问题很烦人,尤其是找不到mysql.h的错误。
我当时也踩过。
我来说说我当时是怎么解决的吧。
可能和你现在面临的场景有些相似。

Linux是最简单粗暴的,只需 sudo apt install libmysqlclient-dev (Ubuntu/Debian) 或 yum install mysql-devel (CentOS),然后 sudo apt install python3 -dev (如果未安装)。
我记得当时在服务器上配置环境变量比这更麻烦。
最后通过这两个命令就全部搞定了。
只需用 pip 重新安装 mysqlclient 即可。
有趣的是,有时执行这些命令后,仍然需要等待系统缓存刷新。
此时您可以手动 sudo apt update 或 yum update 然后重试。

Windows系统稍微复杂一些。
当我使用Win1 0时,我首先安装了Visual Studio Build Tools。
我记得选择“使用C++进行桌面开发”工作负载,否则编译器会崩溃。
然后到MySQL官网下载MySQL Connector/C ZIP包并解压到C:\path\to\mysql-connector-c。
我写了一个环境变量设置代码的批处理脚本,每次安装后都要更改,这很烦人。
后来发现有一个一键配置脚本,直接运行就可以了。

我经常使用代码来直接确认连接。
安装mysqlclient后的某个时候,我运行这个脚本并报告错误。
查看日志发现连接超时,发现数据库服务没有启动。
实在是太蠢了。
有时问题就出在这样的细节上。

其实最烦人的操作就是直接使用Windows预编译的wheel包。
我从非官方 Windows 二进制文件下载了 whl 文件并运行 pip install。
直接搞定了,比乱搞环境变量容易多了。
但要注意版本匹配。
我踩着陷阱安装了MySQL 8 客户端。
但是当我使用Python 3 .6 包的时候,直接崩溃了。

归根结底,问题的关键是编译器找不到mysql.h,所以要么安装开发包,要么手动设置路径。
我建议你从最简单的系统包安装开始。
如果这不起作用,请考虑环境变量,并最终切换到纯 Python 解决方案,例如 PyMySQL。
对于Windows系统来说,预编译包绝对是首选,除非你真的想练习C++编译环境配置。