之前的查询 其实并没有更改数据库,但是增删改操作是改动了数据库,所以在执行完增删改命令之后,还要多一个步骤,提交
conn.commit()
比如,我往数据表中插入数据,在没有 commit 之前,其实数据表中国是没有多一条记录的,commit之后 ,才会插入新的记录。但是,如果我写了插入语句,但是还没有提交,我反悔了,不想插入这一条记录了,就可以使用
conn.rollback()
这里有一点要注意,使用rollback时可以反悔,但是自动增长的id 已经被使用了,如果你再插入一条记录,commit之后,你会发现,rollback的语句虽然没有,但是id却被占用了。
虽然有语句可以将 auto_increment拉回去,但是一定不要这么做。
在原来程序的基础上,添加新功能: 4、添加一个商品分类
from pymysql import connect
class JD(object):
def __init__(self):
# 创建连接
self.conn = connect(host='localhost', port=3306, user='root', database='jingdong', charset='utf8')
# 获得cursor 对象
self.cursor = self.conn.cursor()
def __del__(self):
# 关闭cursor 对象
self.cursor.close()
self.conn.close()
def show_all_goods(self):
'''显示所有的商品'''
sql = 'select * from goods'
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def show_good_cates(self):
'''显示所有商品分类'''
sql = 'select name from good_cates'
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def show_brand_cates(self):
'''显示所有商品品牌分类'''
sql = 'select name from goods_brands'
self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print(temp)
def add_brand(self):
new_brand = input('请输入新的品牌名字:')
sql = '''insert into goods_brands (name) values('%s')'''% new_brand #引号里面嵌套引号的时候,可以用这种形式区分开
self.cursor.execute(sql)
self.conn.commit()
@staticmethod
def show_menus():
print('------京东商城------')
print('1: 查询所有商品')
print('2: 查询所有商品分类')
print('3: 查询所有的商品品牌分类')
print('4: 添加一个商品分类')
return input('请输入您所要执行的功能对应的序号:')
def run(self):
while True:
num = self.show_menus()
if num == '1':
self.show_all_goods()
elif num == '2':
self.show_good_cates()
elif num == '3':
self.show_brand_cates()
elif num == '4':
self.add_brand()
else:
print('输入有误,请重新输入:')
def main():
# 创建一个京东对象
jd = JD()
# 调用这个对象的run方法,让其运行
jd.run()
if __name__ == '__main__':
main()