pymysql操作MySQL数据库的增删改查

本文详细介绍了Python使用pymysql模块连接MySQL数据库,并进行数据的增删改查操作。包括如何增加单条或多条数据,删除单条或多条数据,更新单条或多条数据,以及查询单条、多条和所有数据的方法。同时,文章中还记录了在操作过程中遇到的错误及其解决方案,对于初学者具有很好的参考价值。
摘要由CSDN通过智能技术生成

通用操作:

1、连接数据库

import pymysql

connect_database = pymysql.connect(
    user='root',
    password='123456',
    host='localhost',
    port=3306,
    database='num_one_mysql',
    charset='utf8'
)

2、获取游标

# 获取游标方法一
cursor = connect_database.cursor()

# 获取游标方法二
cursor = connect_database.cursor(pymysql.cursors.DictCursor)

3、执行sql操作,具体增、删、改、查操作见后面

sql_execute = cursor.execute('sql执行语句',数据)

4、通过连接通道向数据库提交操作

注意:只有向数据库提交操作以后,数据库内容才会被修改,否则数据库内容不会发生变化。

# 提交
connect_database.commit()

5、关闭游标

# 关闭游标方法
cursor.close()

6、关闭数据库连接

# 关闭连接
connect_database.close()

数据库kk2表原始数据:

一、增:

1、增加一条数据:

# 执行sql增加数据操作
sql_insert_into = 'insert into kk2(name,age) values(%s,%s)'
rows_insert_into = cursor.execute(sql_insert_into,('aaaa','19'))
if rows_insert_into>0:
    print('增加一条数据成功')
else:
    print('增加数据失败')

2、增加多条数据:

# 执行sql批量增加数据操作
sql_insert_into_many = 'insert into kk2(name,age) values(%s,%s)'
rows_insert_into_many = cursor.executemany(sql_insert_into_many,
                                       [('bbb', '22'), ('ccc', '33'), ('ddd', '44')])

3、增加大量数据

# 执行sql增加大量数据操作
values_all = []
for i in range(10, 20):
    values_all.append(('我是第{}个'.format(str(i)), str(i)))
sql_insert_into_all = 'insert into kk2(name,age) values(%s,%s)'
rows_insert_into_all = cursor.executemany(sql_insert_into_all,values_all)

'''
这次的操作执行了3次,成功运行2次,遇到两个错误:

错误一:append添加数据时没有将一个整体数据传入,所以出现报错
Traceback (most recent call last):
  File "D:/PyCharm 2020.1/WorkSpace/DB_test/db_test.py", line 68, in <module>
    values_all.append('我是第{}个'.format(str(i)), str(i))
TypeError: append() takes exactly one argument (2 given)

错误代码:values_all.append('我是第%s个'.format(str(i)), str(i))
原因分析:'我是第%s个'.format(str(i)) 和 str(i) 这两个数据是作为一个整体传入value的
处理方法:添加括号,将两个参数作为整体添加
 
错误二:第一次出现format方法使用错误,导致name中的数据未递增。(见表中第14-23条)
错误代码:values_all.append(('我是第%s个'.format(str(i)), str(i)))
原因分析:format用法使用错误,不是用%s去占位,实际使用{}进行占位,'用法{}'.format('添加大括号内容')
处理方法:将%s改为{}


'''

 二、删:

1、删除一条数据

# 删除单条数据
sql_delete_from = 'delete from kk2 where name=%s and age=%s and id=%s'
rows_delete_many = cursor.execute(sql_delete_from,('aaa','111','13'))


'''
出现一次报错,分析原因是参数全部必须为字符串类型,即使建表时设置为int 也必须用 %s 去传

错误代码:sql_delete_from = 'delete from kk2 where name=%s and age=%s and id=%d'
         rows_delete_many = cursor.execute(sql_delete_from,('bbb','222',10))

分析原因:参数全部必须为字符串类型,即使建表时设置为int 也必须用 %s 去传

解决方法:将id=%d 改为 id=%s  ,下面对应的执行语句传入参数也同步更改为字符串类型
'''

2、删除多条数据

# 删除多条数据
sql_delete_many = 'delete from kk2 where name=%s and age=%s and id=%s'
rows_delete_many = cursor.executemany(sql_delete_many,[('aaa','111','9'),('bbb','222','14'),('ccc','333','15'),('ddd','444','12')])

三、改:

1、改一条数据

# 执行sql修改数据操作
sql_update_set = 'update kk2 set name=%s where age=%s and id=%s'
row_update_set = cursor.execute(sql_update_set,('p1','18','7'))

2、改多条数据

# 执行sql批量修改数据操作
sql_update_set_many = 'update kk2 set name=%s where age=%s and id=%s '
rows_update_set_many = cursor.executemany(sql_update_set_many,[('p2','18','8'),('p3','18','6'),('p4','33','12')])

四、查:

原始数据:

 

1、查一条数据

# 查找一条数据
sql_select_one = 'select id,name,age from kk2'
row_select_one = cursor.execute(sql_select_one)
# 获取一条数据
fetch_one = cursor.fetchone()
fetch_two = cursor.fetchone()
fetch_three = cursor.fetchone()

print(fetch_one)
print(fetch_two)
print(fetch_three)

'''
cursor.fetchone()有多条语句同时存在的时候,会按照顺序一个一个往下取数据
'''

执行结果:

{'id': 10, 'name': 'bbb', 'age': '222'}
{'id': 11, 'name': 'ccc', 'age': '333'}
{'id': 16, 'name': 'ddd', 'age': '444'}

2、查多条数据

# 查询多条数据
sql_select_many = 'select name,age from kk2'
rows_select_many = cursor.execute(sql_select_many)

fetch_many = cursor.fetchmany(2)
print(fetch_many)

执行结果:

[{'name': 'bbb', 'age': '222'}, {'name': 'ccc', 'age': '333'}]

3、查所有数据

# 查询所有语句
sql_select_all = 'select id,name,age from kk2'
rows_sql_select_all = cursor.execute(sql_select_all)
# 获取所有数据
fetch_all = cursor.fetchall()
print(fetch_all)

执行结果:

[{'id': 10, 'name': 'bbb', 'age': '222'}, {'id': 11, 'name': 'ccc', 'age': '333'}, {'id': 16, 'name': 'ddd', 'age': '444'}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值