python操作Mysql数据库

5 篇文章 0 订阅
1 篇文章 0 订阅

python操作Mysql数据库

需求:

利用pythonMysql数据库进行操作(连接,增删改查)

数据库:test
数据库中的表:user
user字段:id(主键,自增长),name,sex,age


1.导入pymysql,连接数据库

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库

# 导入所需的库
import pymysql
# 连接配置
sql_con = pymysql.connect(
    host='localhost',		#主机地址,本地:localhost,远程:ip地址 
    user='root',			#用户名
    password='root',		#密码(数据库密码)
    db='test',				#数据库名称
    port=3306, 				#端口
    autocommit=False, 		#是否开启自动提交,默认关闭
    charset='utf8')			#字符编码格式

2.【增】插入数据到user表

2.1 普通插入
cursor = sql_con.cursor()	#创建一个游标对象cursor
# SQL 插入语句
sql = """INSERT INTO user(name, sex, age)
         VALUES ('张三', '男', 20)"""
try:
   cursor.execute(sql)		# 执行sql语句
   sql_con.commit()   		# 提交到数据库执行,如果autocommit=True则不需要手动提交 
except:
   sql_con.rollback() 		# 如果发生错误则回滚
   
cursor.close()  			# 关闭不使用的游标对象
sql_con.close() 			# 关闭数据库连接

插入结果
插入结果

2.2 变量传值,动态插入
name = "李四"
sex = "男"
age = 19

# SQL 插入语句
# sql = """INSERT INTO user(name, sex, age)			
#         VALUES ('%s', '%s', %s)"""%(name,sex,age)		#直接拼接
sql = "INSERT INTO user(name, sex, age) VALUES (%s, %s, %s)"

cursor = sql_con.cursor()	#创建一个游标对象cursor
try:
   cursor.execute(sql,(name,sex,age))		# 执行sql语句,并传值拼接(直接拼接,就不需要传值)
   sql_con.commit()   		# 提交到数据库执行,如果autocommit=True则不需要手动提交 
except:
   sql_con.rollback() 		# 如果发生错误则回滚
   
cursor.close()  			# 关闭不使用的游标对象
sql_con.close() 

插入结果
在这里插入图片描述


3.【删】删除user表数据

修改sql语句 为 delete语句,其他步骤以增加数据一致

# 删除user表中,age字段大于19的数据
sql = "DELETE FROM user WHERE age > %s" % (19)

执行结果
在这里插入图片描述


4.【改】修改user表数据

修改sql语句 为 updata语句,其他步骤以增加数据一致

# 更新user表中sex=男的age为108。
sql = "UPDATE user SET age = 108 WHERE sex = '%s'" % ('男')

执行结果
在这里插入图片描述


  • 【增、删、改】 除了sql语句的不同,其他操作都是一致的
  • 对于【查】操作与其略有不同。

5.【查】查询user表数据

对于查询操作有以下两种方式推荐:

通过游标,fetch系列方法进行操作。
结合pandas库,对数据库进行读取,返回DataFrame格式数据

两种方法各有优劣,可自行根据具体情形,择优选择使用

数据库中有以下8条数据
数据库数据

5.1 通过游标,fetch系列方法查询数据

cursor = sql_con.cursor()   # 获取游标对象
sql = 'select * from user '	# 查询user表所有数据

r = cursor.execute(sql) 	# 通过游标对象,执行sql语句,返回值为受影响记录的行数
print("查询到%s条数据"% r)
print("==========fetchone()获取一条数据==========")
print(cursor.fetchone())  	# 第一条数据
print("=====再次执行fetchone()会获取第二条数据=====")
print(cursor.fetchone())  	# 第二条数据
print("========fetchmany(4)获取多条数据==========")
print(cursor.fetchmany(4))  # 指定获取4条, 此时游标已指到第三条数据,所以从第三条开始获取4条数据(游标可以理解为对获取位置的标记)
print("=========fetchall()获取全部数据===========")
print(cursor.fetchall())
print("=======再次执行fetchall()获取全部数据=======")
# 再次执行,获取到的将是一个空元组,因为上边的fetchall已经取完了,游标到了最末端无数据。
print(cursor.fetchall())  	# 当获取完毕,再查询数据返回为()
# 关闭游标
cursor.close()
# 关闭连接
sql_con.close()

查询结果
在这里插入图片描述

  • 由结果可知,在同一个连接查询中,游标的位置一直在随着查询往后移动。
    虽然fetchall()是获取全部数据,但获取的是当前游标及以后的全部数据
    所以通过游标方式查询数据,要注意游标所处的位置。

游标的位置是在变化的,当能我们也可以操作游标
例如,重置游标位置等操作

可以通过scroll()来操作游标

scroll(self, value, mode="relative")
value:	偏移量 大于0向后移动; 小于0向前移动
mode: 	relative:表示从当前所在的行开始移动
		absolute:表示从第一行开始移动 
		(默认relative)

举例:接上5.1,查询cursor.fetchall()为 空后,操作游标

.....接上5.1......
.................
print("=======再次执行fetchall()获取全部数据=======")
# 再次执行,获取到的将是一个空元组,因为上边的fetchall已经取完了
print(cursor.fetchall())  	# 当获取完毕,再查询数据返回为()

print('=======操作游标,回退一位后=========')
cursor.scroll(-1)  			# 游标在当前位置(末端),向前回退一位
print(cursor.fetchall())    # 再次获取 全部数据
print('=======重置游标后=========')
cursor.scroll(0, mode="absolute")  # 初始游标位置,从0开始
print(cursor.fetchall())    # 再次获取 全部数据

cursor.close()				# 关闭游标
sql_con.close()				# 关闭连接

查询结果
在这里插入图片描述

5.2 结合pandas库,查询数据

Pandas 是 Python 语言的一个扩展程序库,用于数据处理分析。
使用pd.read_sql()函数可得到数据库的查询结果,
返回DataFrame格式的数据。

’‘’
# 导入库
import pandas as pd

sql = "select * from user"	#查询语句  查询test数据库中user表全部信息
df_sql = pd.read_sql(sql,sql_con) #执行sql语句并返回结果

print(df_sql)

输出查询结果:
在这里插入图片描述

对于查询数据,这两种方式各有优缺,可以视情况选择合适的。



谢谢阅读,感谢支持!如有错误,请多多指教.
在这里插入图片描述

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛星尘pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值