执行sql语句修改数据库数据:
今天在pycharm中第一次使用MySQL,老师一上来把简单的使用方法一讲就叫我们改一下表里的东西。感觉挺简单的,啪啪啪,下面代码出来了:
import pymysql
db = pymysql.Connect("10.0.126.123","root","aaaaaa","newdb")
cursor = db.cursor()#获取数据库光标,用来操作数据库
sql = "select * from emp;"
sql1 = "desc emp;"
def show(sql):
try:
cursor.execute(sql)#利用光标来操作sql语句
emps = cursor.fetchall()#获取所有行
print("员工信息如下:")
for emp in emps:
# print(emp)#显示所有信息
#此处是修改数据库里的数据的语句(注意本句语句)
sql2 = "update emp set ename={}".format(emp[1]+"1")#给数据库中所有的ename末尾+1
cursor.execute(sql2)
db.commit()
print("一共有{}名员工".format(len(emps)))
cursor.close() # 关闭光标
db.close() # 关闭数据库
except:
print("查询失败!")
db.rollback()
show(sql)
代码打出来,很高心的执行了一下,以为成功了,结果 ……
去掉异常处理条件:
好,终于出现了bug了,如我所愿,因为本人还是比较喜欢bug的,因为处理bug是一个非常爽的时刻,但今天,想了十多分中,还是搞不出来,这回就有点气了,百度了一下,找到了相似的问题,以为我的ename不是字符串类型的,还特意去type了一下,发现就是str的啊,又开始怀疑format的{}占位符不是字符床类型,有点颠覆了我对它的认知,后面str()强制了一下,结果还是不行。思量了半天,万千sql语句从脑海中划过,在看了这里的 ’SCOTT11111‘,然后发现好像在sql中字符串是用 ’ ‘引号包起来的,python中的字符串它是无法识别的。
解决方法:
需要加个 ’ ‘ 引号给占位符包起来。
sql2 = "update emp set ename='{}'".format(emp[1]+"1")#给数据库中所有的ename末尾+1
sql语言和python语言,他们是不同的两个语言,数据类型是不同的,使用时注意。