使用PyMySQL操作MySQL数据库

安装

pip3 install PyMySQL或者python3 -m pip install PyMySQL

连接MySQL数据库

注意:连接之前先确保你已经安装MySQL数据库

MYSQL_CONFIG = {
    'host': 'localhost',  # IP地址
    'port': 3306,  # 端口
    'user': 'root',  # 用户名
    'passwd': '123456',  # 密码
    'db': 'myclass',  # 数据库
    'charset': 'utf8',  # 编码
}

conn = pymysql.connect(**MYSQL_CONFIG)  # 数据库连接
cur = conn.cursor()  # 游标对象

MYSQL_CONFIG中的指标为连接数据库的重要参数,参数的相关说明请看以上注释,相关参数的值请换成你自己的。

本人习惯将参数以字典的方式存储,并在连接时用两个*号来对字典进行解包(有兴趣的小伙伴可以自行搜索python容器解包的相关知识),这样做的好处就是可以抽取关键数据,并将数据放在可配置化脚本中。

当然,你也可以用关键字参数的形式把数据写到connect()方法中,如pymysql.connect(host = 'localhost', port = 3306, ...)

创建连接后我们可以得到一个数据库连接对象conn和游标对象cur

执行SQL查询语句

成功连接数据库后,我们就可以执行相关的SQL语句来增删改查我们的数据了。

myclass数据库中存在student表,我们执行SQL语句来查询student表中的数据
数据表如下

name age height
Mary 18 155.0
Tony 20 175.0
Lisa 19 165.5

执行SQL语句需要用到cur对象中的execute()方法

执行后获取数据的方法主要有以下三种:

  • fetchone(): 获取下一个查询结果集,结果集是一个对象,第一次执行取SQL结果集的第一条数据
  • fetchmany(n): 获取前n条数据的结果集
  • fetchall(): 获取全部的数据结果集
fetchone
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
for i in range(n):
    print(f'--这是第{i + 1}条数据--')
    info = cur.fetchone()
    print(info)

执行结果如下

--这是第1条数据--
('Mary', 18, 155.0)
--这是第2条数据--
('Tony', 20, 175.0)
--这是第3条数据--
('Lisa', 19, 165.5)

n值是执行查询语句返回的结果条数,fetchone()第一次执行取的是第一条数据,之后执行就是取下一条数据,遍历n就可以取到每一条数据。

fetchmany
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
info = cur.fetchmany(2)  # 取前面两条数据
print(info)

执行结果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0))

fetchmany()可以取执行结果集的任意条数据,如果取n则返回全部数据的数据集。

fetchall
sql = "SELECT * FROM student"
n = cur.execute(sql) # 执行后得到数据的条数
info = cur.fetchall() # 取所有数据
print(info)

执行结果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5))

fetchall()就是取执行结果的所有数据的数据集

执行SQL插入语句

上面已经对PyMySQL中SQL的查询方式进行了简单的说明和实现,至于其他的增、删、改操作其实跟上面的查询操作差不多,主要还是使用到cur对象的execute()方法来执行。

但是执行增、删、改操作时需要注意的是,在使用execute()方法执行SQL语句后,还要在后面加一句conn.commit(),用于将事务提交到数据库执行。

如下

sql = "INSERT INTO student VALUES ('Ben', 19, 166.5)"
cur.execute(sql)  # 执行
conn.commit()  # 提交

执行成功后,可以通过查询方法fatchall查看结果,结果如下

(('Mary', 18, 155.0), ('Tony', 20, 175.0), ('Lisa', 19, 165.5), ('Ben', 19, 166.5))

可以看到最后面多了一条新的数据,说明数据插入成功。

删和改的操作跟插入是一样的,在这里就不做过多演示了,有兴趣的小伙伴可以自己尝试去实现。
务必记得要加上commit()语句哦,否则执行后不会发生任何变化。

关闭数据库

在执行完增、删、改、查操作后,最后一定记得要关闭游标和数据库连接,以避免数据库资源的消耗和产生不同连接之间的冲突。

关闭语句如下

cur.close()  # 关闭游标
conn.close()  # 关闭数据库连接
posted @ 2020-07-14 18:15  蓝莓薄荷  阅读(779)  评论(0编辑  收藏  举报