Python 操作 MySQL 的库主要有 2 种,一是比较古老的 MySQLdb 库,另一个是 pymysql 库。
除此之外,有很多基于两者的包装库,如 mysqldb-rich、pymysql-pooling 等,也有针对 Web 应用的 ORM 框架,如 SQLAlchemy,它底层是要借助于 MySQLdb、pymysql 等第三方库来完成,目前 SQLAlchemy 在 Web 编程领域应用广泛。
pymysql
PyMySQL 是一个纯 python 编写的 client 库,替代 MySQLdb 而生,同时接口兼容 MySQLdb,支持 python3,开源代码网址 https://github.com/PyMySQL/PyMySQL。
安装
安装非常简便:
pip install pymysql
也可以离线安装,先下载相应的包文件,然后执行如下命令:
pip install pymysql-x.x.x.tar.gz
连接
通过调用 connect
函数获取一个连接对象(内部实例化一个 Connection
类):
import pymysql
def connect_db():
return pymysql.connect(
host='x.x.x.x',
port=3306,
user='xxx',
password='xxxx',
database='xxxxx',
charset='utf8'
)
插入
import pymysql
def insert_data(tb: str, conn: pymysql.Connection):
cur = conn.cursor()
sql = 'INSERT INTO {table} (post_id) VALUES (1), (2), (3)'.format(table=tb)
cur.execute(sql)
cur.close()
conn.commit()
conn.close()
查询
pymysql 查询数据通过 cursor 游标对象获取真正的数据:
import pymysql
def select_data(tb: str, conn: pymysql.Connection):
cur = conn.cursor()
sql = 'SELECT * FROM {table}'.format(table=tb)
cur.execute(sql)
result = cur.fetchone()
print(type(result), result)
cur.close()
fetchone()
函数表示通过游标最多只获取一条数据;获取指定条数数据可以使用 fetchmany(size)
函数;获取所有的数据用 fetchall()
函数。
需要注意的是游标获取的不管是单条还是多条数据,都是 tuple(元组)类型,一条数据的话,一层元组;若是多条数据,则是两层元组。
删除
删除操作将 sql 语句放入执行函数即可:
import pymysql
def delete_from_table(tb: str, conn: pymysql.Connection):
cur = conn.cursor()
sql = 'DELETE FROM {table}'.format(table=tb)
cur.execute(sql)
cur.close()
conn.commit()
conn.close()