Python3操作MySQL数据库(python3操作mysql数据库只能直接写sql语句吗)

网友投稿 460 2022-09-04


Python3操作MySQL数据库(python3操作mysql数据库只能直接写sql语句吗)

使用Python3操作MySQL数据库我们需要安装三方库PyMySQL,安装方式如下:

$ pip install pymysql

数据库操作步骤为:

建立数据库连接:conn = pymysql.connect()从连接建立操作游标:cur = conn.cursor()使用游标执行sql(读/写):cur.execute(sql)获取结果(读)/ 提交更改(写): cur.fetchall()/conn.commit()关闭游标及连接:cur.close();conn.close()游标是指向数据缓冲区的一个变量,可以逐条的访问数据库执行结果集。PyMySQL中需要通过游标来执行sql和获取结果。

基本使用

import pymysql# 1. 建立连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', # password也可以 db='api_test', charset='utf8') # 如果查询有中文需要指定数据库编码 # 2. 从连接建立游标(有了游标才能操作数据库)cur = conn.cursor()# 3. 查询数据库(读)cur.execute("select * from user where name='张三'")# 4. 获取查询结果result = cur.fetchall()print(result)# 3. 更改数据库(写)cur.execute("delete from user where name='李四'")# 4. 提交更改conn.commit() # 注意是用的conn不是cur# 5. 关闭游标及连接cur.close()conn.close()

数据库查询操作

使用cur.execute(), 执行数据库查询后无返回的是影响的行数,而非查询结果。我们要使用cur.fetchone()/cur.fetchmany()/cur.fetchall()来获取查询结果

cur.fetchone():获取一条数据(同时获取的数据会从结果集删除),返回元祖cur.fetchmany(3):获取多条数据,返回嵌套元祖(('张三','123456'),('李四','123456'),("王五","123456"))cur.fetchall():获取所有数据,返回嵌套元祖,(('张三','123456'),)

注: 获取完数据后,数据会从数据集中删除,再次获取获取不到,如:

cur.execute(select * from user where name='张三')print(cur.fetchone()) # 取走一个结果 得到: ('张三','123456') print(cur.fetchone()) # 结果:None 因为上一步已经把结果取玩了print(cur.fetchall()) # 结果:()所以我们需要重复使用查询结果时,需要将查询结果赋给某个变量cur.execute(select * from user where name='张三')result = cur.fetchall()print(result) # 结果: ('张三','123456')print(result) # 结果: ('张三','123456')

注:如果想要获取字段名和值组合的字典形式的结果,可以使用字典游标 ​​cur = conn.cursor(pymysql.cursors.DictCurser)​​,这样 cur.fetchone()获取到的是字典形式的结果,cur.fetchmany()和cur.fetchall()获取到的是列表嵌套字典。

数据修改操作

执行修改数据库的操作后不立即生效,使用连接conn.commit()提交后才生效,支持事物及回滚

try: cur.execute("insert into user (name,password) values ('张三', '123456')") cur.execute("insert into user (name, passwd) values ('李四'), '123456'") # 此处sql出错 conn.commit() # 使用连接提交所有更改except Exception as e: conn.rollback() # 回滚所有更改(注意用的是conn) print(str(e))


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis参数类型不匹配错误argument type mismatch的处理方案
下一篇:Python3函数中如何理解递归
相关文章

 发表评论

暂时没有评论,来抢沙发吧~