初始化数据库
环境
系统:windows10系统
编辑器:Sublime3
编程语言:python3+pyqt5
数据库操作
本来数据库这一块是用到再说的,但是整个项目做完之后,发现先把这一块给弄好后,后续的就好办了
感觉这个数据库就是后端、后台的内容,而界面设计就是前端的东西。
数据库的初始化完全就是sqlite3的内容,主要思路就是,检测本地有没有这个数据库,没有的话直接初始化数据
首先是构造一个数据库类,为后面真正使用的3个类做准备,这个类有一些基本功能,创建,删除,切换库
class DbManager(object):
def __init__(self, *args):
self.db = sqlite3.connect(*args)
self.cursor = self.db.cursor()
def __enter__(self):
return self.cursor
def __exit__(self, types, value, traceback):
self.db.commit()
return False
def __del__(self):
self.db.commit()
self.db.close()
def switchDb(self, *args):
self.db.close()
self.db = sqlite3.connect(*args)
self.cursor = self.db.cursor()
def createTable(self, tableString):
self.cursor.execute(tableString)
self.db.commit()
def commitAndClose(self):
self.db.commit()
self.db.close()
接下来是用户类
用户类中,实现这么几个函数:初始化数据,添加普通用户,添加管理员,查询用户信息,查询管理员,更新密码,借书还书。
class UserDbManager(DbManager):
def __init__(self, database=dbpath, *args):
super().__init__(database, *args)
self.initDb()
def initDb(self):
self.createTable(createUserTableString)
def initDatabase(self):
password='admin123'
hl = hashlib.md5() #将密码进行md5加密
hl.update(password.encode(encoding='utf-8'))
md5password = hl.hexdigest()
self.addAdminUser('admin','Fengqi',md5password) #添加管理员账号
password='user123'
hl = hashlib.md5() #将密码进行md5加密
hl.update(password.encode(encoding='utf-8'))
md5password = hl.hexdigest()
self.addUser('user000000','user000000',md5password) #添加普通用户
def addUser(self,userid, Name, Password,IsAdmin=0):
''' 添加普通用户 '''
insertData = self.cursor.execute("""INSERT INTO user
(userid, Name, Password,IsAdmin,TimesBorrowed,NumBorrowed) VALUES
('{0}', '{1}', '{2}','{3}','{4}','{5}')
""".format(userid, Name, Password,IsAdmin,0,0))
self.db.commit()
def addAdminUser(self,userid, Name, Password):
''' 添加管理员用户'''
self.addUser(userid, Name, Password,IsAdmin=1)
def querybyUserid(self,userid):
fetchedData = self.cursor.execute("SELECT * FROM user WHERE userid='%s'" % (userid) )
#a=fetchedData.fetchall()#通过fetchall接受全部数据,是一个list,list的每个元素是tuple类型数据
return fetchedData.fetchall()
def getAdmineUserinfo(self):
'''获取管理员用户 '''
fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=1")
return fetchedData
def getUserinfo(self):
'''获取一般用户'''
fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=0")
return fetchedData
def updatePassword(self,password,userid):
fetchedData = self.cursor.execute("UPDATE User SET Password='%s' WHERE userid=%s" % (password,userid))
self.db.commit()
def borrowOrReturnBook(self,userid,borrow=1):
if borrow == 1 :
fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed+1,NumBorrowed=NumBorrowed+1 WHERE userid='%s'" % userid)
else:
fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed-1,NumBorrowed=NumBorrowed-1 WHERE userid='%s'" % userid)
self.db.commit()
接下来是图书类,有书库初始化,添加删除图书,借书还书,书籍查询等功能
class BookDbManager(DbManager):
def __init__(self, database=dbpath, *args):
super().__init__(database, *args)
self.initDb()
def initDb(self):
self.createTable(createBookTableString)
def initDatabase(self):
self.addBOOK('力学', 'IS1000', '刘斌', '教育', '中国科学技术大学 ', '1999-01-01', 100, 100, 0)
self.addBOOK('微积分', 'IS1001', '牛顿莱布尼兹', '教育', '中国科学技术大学', '1998-01-01', 14, 14, 0)
self.addBOOK('电磁场论', 'IS1002', '叶邦角', '教育', '中国科学技术大学', '1997-01-01', 24, 24, 0)
self.addBOOK('热学', 'IS1003', '张鹏飞', '教育', '中国科学技术大学', '2002-01-01', 45, 45, 0)
self.addBOOK('电动力学', 'IS1004', '叶邦角', '教育', '中国科学技术大学', '2003-01-01', 100, 100, 0)
self.addBOOK('数据库', 'IS1006', '袁平波', '教育', '中国科学技术大学', '2010-01-01', 10, 10, 0)
self.addBOOK ('电磁学', 'IS1005', '叶邦角', '教育', '中国科学技术大学 ', '2012-01-01', 43, 43, 0)
self.addBOOK ('数学分析', 'IS1007', '陈卿', '教育', '中国科学技术大学', '2013-01-01', 23, 23, 0)
self.addBOOK('吉米多维奇题解1', 'IS1008', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('吉米多维奇题解2', 'IS1009', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('吉米多维奇题解3', 'IS1010', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('吉米多维奇题解4', 'IS1011', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('吉米多维奇题解5', 'IS1012', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('吉米多维奇题解6', 'IS1013', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
self.addBOOK('朗道力学', 'IS1014', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
self.addBOOK('朗道电动力学', 'IS1015', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)