又是一个完善版本,学一点东西就添加一些上去,不断改进。先附上关于异常处理的结构方法,便于进行代码阅读:
异常处理结构:
try:
可能出现异常的代码块
expect:
出现异常后所运行的代码块
else:
未出现异常所运行的代码块
finally:
无论是否出现异常,都会运行的代码块
数据库:
import pymysql #导入mysql包
class Sql(): #创建类
def __init__(self): #定义构造方法
self.host = input('host:')
self.port = int(input('port:'))
self.name = input('aconunt:')
self.pwd = input('password:')
self.db = input('database:')
self.charset = input('charset:')
def UI(self): #定义界面
a = input('1查询 2、修改 3、退出(输入1or2or3选择)>>') # 将输入的值转换为int型
if a.isnumeric(): #判断输入是否为数字
if int(a) == 1:
self.sql_query() # a的值为1的时候执行查询函数
elif int(a) == 2:
self.sql_change() # a的值为2的时候执行修改函数
elif int(a) == 3:
exit()
print('已退出!') # a的值为3的时候退出
else:
print('您的输入有误,请重新输入。')
else:
print('您的输入有误,请重新输入。')
def __sql_conn(self): #定义连接方法
try: #异常处理让sql语句后可得到相应提示
conn = pymysql.connect(host=self.host, port=self.port, user=self.name, password=self.pwd, database=self.db,
charset=self.charset)
cur = conn.cursor() #获取数据库连接对象和游标
return conn, cur #返回
except Exception: #异常处理的返回值,Exception表示常规的错误类
print('连接信息有误,请重新输入。')
def sql_query(self): #定义查询方法
conn, cur = self.__sql_conn() #通过连接方法直接获取连接对象和游标对象,在之前发布的两篇文章中也有相同的用法
while True: #使用死循环,让用户在sql语句输入错误的情况下也能重新输入
try: #异常处理
sql = input('请输入操作:')
cur.execute(sql) #执行sql语句执行
rest = cur.fetchall() #返回输出结果,次出页未指定输出返回结果的数量,上一篇文章中有提及相应的方法,此处不再赘述
except Exception: #异常处理
print('Sql语句错误!') #异常处理
continue #重新开始循环
else: #异常处理
for select in rest: #以下是对查询结果格式的调整,在之前的文章中有提及,此处也不在赘述
print(*select)
a = input('1、继续操作 2、返回 3、退出(输入1or2选择)>>')
if int(a) == 1:
continue
elif int(a) == 2:
self.UI()
else:
cur.close()
conn.close()
break
def sql_change(self):
conn, cur = self.__sql_conn()
while True:
try:
sql = input('请输入操作:')
cur.execute(sql)
conn.commit()
except Exception:
print('sql语句错误,请重新输入。')
continue
else:
a = input('1、继续操作 2、返回 3、退出(输入1or2选择)>>')
if int(a) == 1:
continue
elif int(a) == 2:
self.UI()
else:
cur.close()
conn.close()
break
if __name__ == '__main__':
act = Sql() #实例化类
act.UI() #用实例对象调取UI方法