Пример #1
0
 def goto_register_register(self):
     name = self.account_lineEdit.text()
     passwd = self.passwd_lineEdit.text()
     confirm = self.confirm_lineEdit.text()
     print('*')
     print(name, passwd)
     if name == '' or passwd == '' or confirm == '':
         reply = QtWidgets.QMessageBox.about(self, '提示', '输入内容不完整')
     elif passwd != confirm:
         reply = QtWidgets.QMessageBox.about(self, '提示', '密码输入不一致')
     else:
         # 写入数据库
         mm = Mysql_manager()
         with mm:
             sql = 'insert into user_info values(%s,%s,%s)'
             mm.exe_db(sql, (name, passwd, 1))
Пример #2
0
 def regitster_to_DB(self):
     user = self.user.text()  # user对象文本框返回取得的值,文本框内容只要输入,就有返回值。随时调用,随时返回
     passwd = self.passwd.text()
     confirm = self.confirm.text()
     # 首先进行合法性判断 暂时不做正则判断
     if user == '' or passwd == '' or confirm == '':
         print('输入不能为空')  # 命令行输出
         print(
             QMessageBox.warning(None, '输入错误', '帐号密码不能为空', QMessageBox.Yes,
                                 QMessageBox.Yes))
     elif passwd != confirm:
         print('两次密码输入不一致')
         print(
             QMessageBox.warning(None, 'notice', '密码输入不一致', QMessageBox.Yes,
                                 QMessageBox.Yes))
     else:
         # 确认输入无误后连接数据库并且保存信息
         mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
         with mm:
             # 不需要指定使用数据库?
             sql = 'insert into user_info values(%s,%s,%s)'
             mm.cur.execute(sql, (user, passwd, 1))  # 最后一个参数用作其他判断
             # with语句在结束时自动调用exit方法(该方法自动commit和关闭)
             print('注册成功')
             print(
                 QMessageBox.warning(None, '注册成功', '账号密码写入到数据库',
                                     QMessageBox.Yes, QMessageBox.Yes))
Пример #3
0
 def goto_login_login(self):  # 跳转到登录类的登录按钮
     # 首先要进行数值判断
     name = self.account_lineEdit.text()
     passwd = self.passwd_lineEdit.text()
     mm = Mysql_manager()
     with mm:
         sql = 'select * from user_info where user_name = %s and user_passwd = %s'
         result = mm.exe_db(sql, (name, passwd))
         print('----')
         print(result)
         if len(result) == 0:
             reply = QtWidgets.QMessageBox.about(self, '提示', '帐号或者密码错误')
         else:
             self.em = Em_manager()  # 这里必须用self,不然函数运行完,自动清除
             self.em.show()
             login.close()  # 输入错误的情况下不关闭登录框
Пример #4
0
 def add_em(self):
     # 首先建立数据库连接。实例数据库操作类,属性没必要保存,一般变量即可
     name = self.rm.is_name()
     dept = self.rm.is_dept()
     ip = self.rm.is_ip()
     mac = self.rm.is_mac()
     mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
     with mm:
         sql = 'insert into em_info values(%s,%s,%s,%s)'
         mm.cur.execute(sql,(name,dept,ip,mac))
     print(f'{name}的信息添加成功')
Пример #5
0
 def del_em(self): # 在这里顺便测试try语法
     print('支持通过姓名删除相关信息。')
     name = self.rm.is_name()
     mm = Mysql_manager('localhost','root','root',3306,'milkbottle') #  实例化并不会连接数据库,enter方法才调用连接
     with mm:
         sql = 'delete from em_info where em_name = %s'
         mm.cur.execute(sql,name)
         if mm.cur.rowcount == 0:
             print('没有相关员工信息')
         else:
             print('信息删除成功')
Пример #6
0
    def login_clicked(self):
        user = self.user_lineEdit.text()
        passwd = self.passwd_lineEdit.text()
        if user == '' or passwd == '':
            print('账号密码不能为空')
            reply = QMessageBox.about(self, '注意', '账号密码不能为空')
        else:
            # 应该不需要判断格式,直接通过数据库查询
            mm = Mysql_manager()
            with mm:
                sql = 'select * from user_info where user_name = %s and user_passwd = %s'
                mm.exe_db(sql, (user, passwd))
                if mm.cur.rowcount == 0:
                    print('账号密码错误')
                    reply = QMessageBox.about(self, '注意', '账号密码错误')
                    # 账号密码错误的情况下也需要重置文本框

                else:
                    print('登录成功')
                    self.em = Em_manager()
                    self.close()
                    self.em.show()
Пример #7
0
    def export_excel(self,path):
        self.wb = Workbook()
        self.ws = self.wb.active
        # 先输出表头
        self.ws.cell(row = 1,column = 1).value = '姓名'
        self.ws.cell(row = 1,column = 2).value = '部门'
        self.ws.cell(row = 1,column = 3).value = 'IP地址'
        self.ws.cell(row = 1,column = 4).value = 'MAC地址'
        mm = Mysql_manager()
        with mm:
            result = mm.db_show()
            num = 2 # 计数递增使用
            for i in result:
                self.ws.cell(row = num,column = 1).value = i[0]
                self.ws.cell(row = num,column = 2).value = i[1]
                self.ws.cell(row = num,column = 3).value = i[2]
                self.ws.cell(row = num,column = 4).value = i[3]

                num += 1
            #最后记得需要保存
        print(f'数据成功导出到{path}')
        self.wb.save(path)
Пример #8
0
 def del_clicked(self):
     name = self.user_lineEdit.text()
     ip = self.ip_lineEdit.text()
     if name == '' and ip == '':
         print('请至少输入一个条件')
         reply = QMessageBox.about(self, '提示', '至少输入一个条件来删除')
     else:
         # 正则判断
         mm = Mysql_manager()
         rem = Re_manager()
         name = rem.is_name(name)
         ip = rem.is_ip(ip)
         if name == None and ip == None:
             print('输入格式不正确')
             reply = QMessageBox.about(self, '提示', '输入格式不正确')
         elif name == None:  # 这里开始至少一个不为0
             with mm:
                 sql = 'delete from em_info where em_ip = %s'
                 mm.db_exe(sql, ip)
                 if mm.cur.rowcount == 0:
                     print('没有该IP相关信息')
                     reply = QMessageBox.about(self, '提示', '没有该IP的相关信息')
                 else:
                     print('删除成功')
                     reply = QMessageBox.about(self, '提示', f'{ip}的相关信息已删除')
         elif ip == None:
             with mm:
                 sql = 'delete from em_info where em_name = %s'
                 mm.db_exe(sql, name)
                 if mm.cur.rowcount == 0:
                     print('没有该员工信息')
                     reply = QMessageBox.about(self, '提示', '数据库没有该员工信息')
                 else:
                     print('删除成功')
                     reply = QMessageBox.about(self, '提示',
                                               f'{name}的相关信息已删除')
         else:  # 最后一种情况,两个文本框都有内容
             with mm:
                 sql = 'select * from em_info where em_name = %s and em_ip = %s'
                 mm.db_exe(sql, (name, ip))
                 if mm.cur.rowcount == 0:
                     print('没有相关信息')
                     reply = QMessageBox.about(self, '提示', '没有相关信息')
                 else:
                     print('删除成功')
                     reply = QMessageBox.about(self, '提示', '信息删除成功')
     # 无论如何,清空文本框
     self.user_lineEdit.setText('')
     self.ip_lineEdit.setText('')
Пример #9
0
 def import_excel(self,path):
     # path 通过其他方法获取并传递进来
     # 从表格导入数据到数据库
     # 先从打开表格,获取当前子表
     self.wb = load_workbook(path)
     self.ws = self.wb.active
     # 使用for循环读出相应数据
     # 首先获取表行数
     row_num = self.ws.max_row #都是属性,不是方法 使用了修饰器的方法
     mm = Mysql_manager()
     with mm:
         sql = 'insert into em_info values(%s,%s,%s,%s,%s,%s,%s)'
         for i in range(2,row_num+1):   # 表格是从1开始计数,去掉抬头
             name = self.ws.cell(row = i,column = 1).value
             dept = self.ws.cell(row = i,column = 2).value
             ip = self.ws.cell(row = i,column = 3).value
             mac = self.ws.cell(row = i,column = 4).value
             room = self.ws.cell(row = i,column = 5).value
             switch = self.ws.cell(row = i,column = 6).value
             port = self.ws.cell(row = i,column = 7).value
             mm.exe_db(sql,(name,dept,ip,mac,room,switch,port))
         print('数据导入成功')
Пример #10
0
    def add_clicked(self):
        # 首先获取文本框的值,进行基本的合法性判断
        name = self.user_lineEdit.text()
        dept = self.dept_lineEdit.text()
        ip = self.ip_lineEdit.text()
        mac = self.mac_lineEdit.text()
        room = self.room_lineEdit.text()
        switch = self.switch_lineEdit.text()
        port = self.port_lineEdit.text()

        if name == '' or dept == '' or ip == '' or mac == '' \
            or room == '' or switch == '' or port == '':
            print('请完善员工信息')
            reply = QMessageBox.about(self, '提示', '请先完善个人信息')
        else:
            rem = Re_manager()
            name = rem.is_name(name)
            dept = rem.is_dept(dept)
            ip = rem.is_ip(ip)
            mac = rem.is_mac(mac)
            room = rem.is_room(room)
            switch = rem.is_switch(switch)
            port = rem.is_port(port)
            if name == None or dept == None or ip == None or mac == None \
                or room == None or switch == None or port == None:
                print('请检查输入格式')
                reply = QMessageBox.about(self, '提示', '请检查输入格式')
            else:
                # 符合要求,开始写入数据到数据库
                mm = Mysql_manager()
                with mm:
                    sql = 'insert into em_info values(%s,%s,%s,%s,%s,%s,%s)'
                    mm.exe_db(sql, (name, dept, ip, mac, room, switch, port))
                    print('更新成功')
                    reply = QMessageBox.about(self, '提示', '员工信息更新成功')

            # 无论是格式失败还是添加成功,清空员工信息框,调用重置函数即可
            self.reset_clicked()
Пример #11
0
 def del_em(self):
     name = input('请输入员工姓名:')
     name = self.rem.is_name(name)
     if name == None:
         print('输入格式不正确')
     else:
         mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
         with mm:
             sql = 'delete from em_info where em_name = %s'
             mm.cur.execute(sql,name)
             if mm.cur.rowcount == 0: # 代表上条语句执行后受影响条数。如果影响行数为1.代表成功
                 print('没有当前员工信息')
             else:
                 print('当前员工信息删除成功')
Пример #12
0
    def import_excel(self,path):
        # 表格对象
        self.wb = load_workbook(path)
        # 表单(子表)对象
        self.ws = self.wb.active
        
        # 建立数据库连接
        mm = Mysql_manager()
        sql = 'insert into em_info values(%s,%s,%s,%s)' 
        with mm:
            # 循环读出,循环写入
            row_num = self.ws.max_row # 获取子表行数
            print('测试')
            print(row_num)
            # 注意表格计数是从1开始,不是0
            for i in range(2,row_num+1):
                name = self.ws.cell(row = i,column = 1).value
                dept = self.ws.cell(row = i,column = 2).value
                ip = self.ws.cell(row = i,column = 3).value
                mac = self.ws.cell(row = i,column = 4).value

                mm.db_exe(sql,(name,dept,ip,mac))
                
                print('数据成功导入到数据库')
Пример #13
0
    def show_em(self):
        # 首先从数据库读取相关文件,注意考虑是否需要类变量还是临时变量
        mm = Mysql_manager()
        with mm:
            result = mm.query_db()  # 返回值对应fetchall
            row_num = mm.cur.rowcount  # 数据库实例还在内存。所以self.cur.rowcount还在内存,可以调用
            # 建立数据模型 这里需要得到qtsql
            self.model = QtGui.QStandardItemModel(row_num, 4)  # 建立二维数据模型

            # 建立数据模型的水平表头
            title = ['姓名', '部门', 'IP', 'MAC']
            self.model.setHorizontalHeaderLabels(title)
            # 将数据模型和显示视图进行绑定
            self.show_tableview.setModel(self.model)
            #下面这里设置列宽必须在设置model以后,否则实际不会生效
            self.show_tableview.setColumnWidth(0, 170)
            self.show_tableview.setColumnWidth(1, 170)
            self.show_tableview.setColumnWidth(2, 170)
            self.show_tableview.setColumnWidth(3, 170)
            # 循环方式实例每个元素数据,绑定过。实例的数据自动同步到view
            # result 是个二维元组集合
            num = 0  # 循环递增使用
            for i in result:
                # i就是一维元组了
                item0 = QtGui.QStandardItem(i[0])
                item1 = QtGui.QStandardItem(i[1])
                item2 = QtGui.QStandardItem(i[2])
                item3 = QtGui.QStandardItem(i[3])

                # 四个实例元素分别赋值给对应位置元素
                self.model.setItem(num, 0, item0)
                self.model.setItem(num, 1, item1)
                self.model.setItem(num, 2, item2)
                self.model.setItem(num, 3, item3)
                # 每次循环完item0-3重置,重新赋值了
                num += 1
Пример #14
0
    def goto_del_confirm(self):
        name = self.user_lineEdit.text()
        ip = self.ip_lineEdit.text()
        if name == '' and ip == '':
            reply = QtWidgets.QMessageBox.about(self, '提示', '请输入用户名或者IP地址查询')
        elif name == '':  # 此时通过IP查询来删除
            mm = Mysql_manager()
            with mm:
                sql = 'delete from em_info where em_ip = %s'
                result = mm.exe_db(sql, ip)
                # 要么没有当前IP,要么直接被删除
                if mm.cur.rowcount == 0:  # 注意有嵌套判断语句
                    reply = QtWidgets.QMessageBox.about(
                        self, '提示', '没有当前IP地址信息')
                    print('不进行操作。没有该IP')
                else:
                    # 无需在view输出
                    reply = QtWidgets.QMessageBox.about(
                        self, '提示', f'{ip}的相关信息删除成功')

        elif ip == '':
            mm = Mysql_manager()
            with mm:
                sql = 'delete from em_info where em_name = %s'
                result = mm.exe_db(sql, name)
                if mm.cur.rowcount == 0:
                    reply = QtWidgets.QMessageBox.about(self, '提示', '没有当前员工信息')
                else:
                    reply = QtWidgets.QMessageBox.about(
                        self, '提示', f'{name}的信息删除成功')

        else:  # name和ip都有输入
            mm = Mysql_manager()
            with mm:
                sql = 'delete from em_info where em_name = %s and em_ip = %s'
                result = mm.exe_db(sql, (name, ip))
                if mm.cur.rowcount == 0:
                    reply = QtWidgets.QMessageBox.about(self, '提示', '没有找到相关信息')
                else:
                    reply = QtWidgets.QMessageBox.about(
                        self, '提示', f'姓名:{name},IP:{ip}的相关信息被删除')
Пример #15
0
 def modify_em(self):
     name = self.rm.is_name()
     mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
     with mm:
         sql = 'select * from em_info where em_name = %s'
         mm.cur.execute(sql,name)
         if mm.cur.rowcount == 0:
             print('没有当前员工信息')
         else:
             dept = self.rm.is_dept()
             ip = self.rm.is_ip()
             mac = self.rm.is_mac()
             sql = 'update em_info set em_dept = %s,em_ip = %s,em_mac = %s where em_name = %s'
             mm.cur.execute(sql,(dept,ip,mac,name)) # 注意参数顺序
             print(f'{name}的个人信息更新成功')
Пример #16
0
 def show_em(self): # 这里验证fetchall的用法。就是个二维元组(列表),双循环打印出来
     mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
     with mm:
         sql = 'select * from em_info'
         mm.cur.execute(sql)
         # 先打印表头
         print('姓名'.ljust(8),end = '\t')
         print('部门'.ljust(8),end = '\t')
         print('ip'.ljust(8),end = '\t')
         print('mac'.ljust(8))
         result = mm.cur.fetchall()
         for i in result:
             for j in i:
                 print(j.ljust(8),end = '\t')
             print()
Пример #17
0
    def modify_em(self): # 注意用的都是临时变量
        name = input('请输入准备修改的员工的姓名:')
        name = self.rem.is_name(name)

        dept = input('部门:')
        dept = self.rem.is_dept(dept)
        ip = input('ip:')
        ip = self.rem.is_ip(ip)
        mac = input('mac:')
        mac = self.rem.is_mac(mac)
        if dept == None or ip == None or mac == None or name == None:
            print('需要修改的信息格式不正确。')
        else:
            mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
            with mm: # 判断是否存在和修改一条过。通过rowcount判断是否修改了数据
                sql = 'update em_info set em_dept = %s,em_ip = %s,em_mac = %s where em_name = %s'
                mm.cur.execute(sql,(dept,ip,mac,name))
                print('信息修改成功')
Пример #18
0
    def setupUi(self):
        # MVC 模式  mode添加数据源  viewer qtableview实例 通过controller控制
        self.model = QStandardItemModel(3, 4)
        title = ['姓名', '部门', 'IP', 'MAC']
        self.model.setHorizontalHeaderLabels(title)  # 设置表格抬头

        self.tableview = QTableView()  # 设置viewer
        self.tableview.horizontalHeader().setStretchLastSection(True)
        # self.tableview.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        # 将M和C进行关联
        self.tableview.setModel(self.model)

        # 给表格添加数据(给model添加数据)
        mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
        with mm:
            sql = 'select * from em_info'
            mm.cur.execute(sql)
            result = mm.cur.fetchall()
            # for i in result:
            #     print(i[2])
            m = 0
            for i in result:
                item0 = QStandardItem(i[0])  # 分别取得姓名 部门 ip  mac
                item1 = QStandardItem(i[1])
                item2 = QStandardItem(i[2])
                item3 = QStandardItem(i[3])
                self.model.setItem(m, 0, item0)
                self.model.setItem(m, 1, item1)
                self.model.setItem(m, 2, item2)
                self.model.setItem(m, 3, item3)
                m += 1

        # 设置布局 不加这三行不显示列表控件
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableview)
        self.setLayout(self.layout)
        self.resize(600, 600)
        self.show()
Пример #19
0
 def import_excel(self):
     # 首先判断需要导入的表格是否存在。防止后面报错
     if os.path.exists('template.xlsx'):
         # 首先获取表格对象
         # 一次添加,最后commit
         mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
         with mm:
             sql = 'insert into em_info values(%s,%s,%s,%s)'
             wb = load_workbook('template.xlsx')
             # 然后获取工作单子表
             ws = wb.active
             # 获取工作单行数
             row_num = ws.max_row  # 属性,不是函数max_row  第一行为表头
             for i in range(2, row_num + 1):  # 表格是从1开始,而不是0
                 name = ws.cell(row=i, column=1).value
                 dept = ws.cell(row=i, column=2).value
                 ip = ws.cell(row=i, column=3).value
                 mac = ws.cell(row=i, column=4).value
                 mm.cur.execute(sql, (name, dept, ip, mac))
         print('从表格导入信息成功')
     else:
         print('请在指定目录存放template.xlsx文件')
Пример #20
0
 def export_excel(self):
     wb = Workbook()
     ws = wb.active
     # 输出表头
     ws.cell(row=1, column=1).value = '姓名'
     ws.cell(row=1, column=2).value = '部门'
     ws.cell(row=1, column=3).value = 'ip'
     ws.cell(row=1, column=4).value = 'mac'
     mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
     with mm:
         sql = 'select * from em_info'
         mm.cur.execute(sql)
         result = mm.cur.fetchall()
         num = 2  # 从第二行开始添加
         for i in result:
             # 每一个二维元组第一次拆包就是一个一元元组
             ws.cell(row=num, column=1).value = i[0]
             ws.cell(row=num, column=2).value = i[1]
             ws.cell(row=num, column=3).value = i[2]
             ws.cell(row=num, column=4).value = i[3]
             num += 1
         print('数据导出成功')
     wb.save('backup.xlsx')
Пример #21
0
    def show_singel(self, result):  # 这里的参数就是发射的返回值
        # 对接收的数据做显示处理
        # 建立数据模型
        print('跳转到主窗口显示单个函数成功')
        mm = Mysql_manager()
        with mm:
            self.model = QtGui.QStandardItemModel(len(result), 4)
            title = ['姓名', '部门', 'IP', 'MAC']
            self.model.setHorizontalHeaderLabels(title)
            self.tableView.setModel(self.model)
            num = 0
            for i in result:
                item0 = QtGui.QStandardItem(i[0])
                item1 = QtGui.QStandardItem(i[1])
                item2 = QtGui.QStandardItem(i[2])
                item3 = QtGui.QStandardItem(i[3])

                self.model.setItem(num, 0, item0)
                self.model.setItem(num, 1, item1)
                self.model.setItem(num, 2, item2)
                self.model.setItem(num, 3, item3)

                num += 1
Пример #22
0
    def import_excel(self):
        # 导入数据库,先判断是否存在待导入文件
        if os.path.exists('template.xlsx'):
            # 建立表格对象
            wb = load_workbook('template.xlsx')
            # 获取表单对象
            ws = wb.active
            # 获取表格行数,注意后面没有括号
            row_num = ws.max_row
            # 实例数据库操作类。建立连接
            mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
            with mm:
                sql = 'insert into em_info values(%s,%s,%s,%s)'
                # 表格是1开始计数。第二行开始是需要的数据
                for i in range(2, row_num + 1):
                    name = ws.cell(row=i, column=1).value
                    dept = ws.cell(row=i, column=2).value
                    ip = ws.cell(row=i, column=3).value
                    mac = ws.cell(row=i, column=4).value
                    mm.cur.execute(sql, (name, dept, ip, mac))
                    print('数据导入成功')

        else:
            print('没有找到表格文件')
Пример #23
0
 def query_em(self):
     name = input('请输入需要查询的员工姓名:')
     name = self.rem.is_name(name)
     if name == None:
         print('输入格式不正确')
     else:
         mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
         with mm:
             sql = 'select * from em_info where em_name = %s'
             mm.cur.execute(sql,name)
             result = mm.cur.fetchall()
         if mm.cur.rowcount == 0:
             print('员工信息不存在')
         else:
             # 多个查询值
             #先打印抬头
             print('姓名'.ljust(8),end = '\t')
             print('部门'.ljust(8),end = '\t')
             print('ip'.ljust(8),end = '\t')
             print('mac'.ljust(8))
             for i in result:
                 for j in i:
                     print(j.ljust(8),end = '\t')
                 print()
Пример #24
0
    def add_em(self):
        name = input('请输入员工姓名:')
        dept = input('请输入员工部门:')
        ip = input('请输入员工IP:')
        mac = input('请输入员工MAC:')

        # 传入正则类做比较
        name = self.rem.is_name(name)
        dept = self.rem.is_dept(dept)
        ip = self.rem.is_ip(ip)
        mac = self.rem.is_mac(mac)

        if name == None or dept == None or ip == None or mac == None:
            print('输入格式不正确。返回主菜单')  # 如果想返回子菜单,需要添加子循环
            print(name)
            print(dept)
            print(ip)
            print(mac)
        else:
            mm = Mysql_manager('localhost','root','root',3306,'milkbottle')
            with mm:
                sql = 'insert into em_info values(%s,%s,%s,%s)'
                mm.cur.execute(sql,(name,dept,ip,mac)) # 第二个参数一个元祖,字符串都行,多个就用元祖
                print(f'{name}的个人信息添加成功')
Пример #25
0
 def goto_query_confirm(self):
     name = self.user_lineEdit.text()
     ip = self.ip_lineEdit.text()
     # 先获取到值,然后通过自定义信号发送到父窗口
     if name == '' and ip == '':
         print('内容为空')
         reply = QtWidgets.QMessageBox.about(self, '提示', '请输入姓名或者IP进行查询')
     elif name == '':
         mm = Mysql_manager()
         with mm:
             sql = 'select * from em_info where em_ip = %s'
             result = mm.exe_db(sql, ip)
             self.my_signal.emit(result)  # 发射自定义信号
     elif ip == '':
         mm = Mysql_manager()
         with mm:
             sql = 'select * from em_info where em_name = %s'
             result = mm.exe_db(sql, name)
             self.my_signal.emit(result)
# 测试python 查询数据库的返回值格式
from Mysql_manager import *

mm = Mysql_manager('localhost', 'root', 'root', 3306, 'milkbottle')
with mm:
    # mm.cur.execute('use milkbottle')
    # mm.cur.execute('select user_passwd from user_manager where user_name = "user2"')
    # result = mm.cur.fetchone()
    # print(result[0])
    sql = "delete from em_info where em_name = '咔咔'"
    # sql = 'select * from em_info'
    mm.cur.execute(sql)
    print(mm.cur.rowcount)
Пример #27
0
    def query_clicked(self):  # 显示当个查询结果
        text = self.query_lineEdit.text()
        if text == '':
            print('请输入查询内容1')
            reply = QMessageBox.about(self, '提示', '请输入内容再进行查询')
        else:
            rem = Re_manager()
            name = rem.is_name(text)
            ip = rem.is_ip(text)
            if name == None and ip == None:
                print('请输入正确的姓名或者IP地址')
                reply = QMessageBox.about(self, '提示', '请输入正确的姓名或者IP地址')
            elif ip == None:
                # 通过姓名查询
                mm = Mysql_manager()
                with mm:
                    sql = 'select * from em_info where em_name = %s'
                    result = mm.exe_db(sql, name)
                    if mm.cur.rowcount == 0:
                        print('没有任何内容')
                        reply = QMessageBox.about(self, '提示', '没有查询到任何内容')
                        self.query_lineEdit.setText('')  # 查不到内容时,文本框清空
                    else:
                        # 重新建立数据模型与视图绑定
                        # 注意不要与类变量冲突,好像冲突也没事。每次调用又会覆盖
                        self.model = QStandardItemModel(mm.cur.rowcount, 7)
                        # 数据模型抬头
                        title = [
                            '姓名', '部门', 'IP地址', 'MAC地址', '房间号', '交换机地址',
                            '交换机端口'
                        ]
                        self.model.setHorizontalHeaderLabels(title)
                        # 无论查询结果是几个,返回都是二维元组
                        num = 0
                        for i in result:
                            item0 = QtGui.QStandardItem(i[0])
                            item1 = QtGui.QStandardItem(i[1])
                            item2 = QtGui.QStandardItem(i[2])
                            item3 = QtGui.QStandardItem(i[3])
                            item4 = QtGui.QStandardItem(str(i[4]))
                            item5 = QtGui.QStandardItem(i[5])
                            item6 = QtGui.QStandardItem(str(i[6]))

                            self.model.setItem(num, 0, item0)
                            self.model.setItem(num, 1, item1)
                            self.model.setItem(num, 2, item2)
                            self.model.setItem(num, 3, item3)
                            self.model.setItem(num, 4, item4)
                            self.model.setItem(num, 5, item5)
                            self.model.setItem(num, 6, item6)
                            num += 1
                        self.tableView.setModel(self.model)
            else:
                # 通过IP地址查询
                mm = Mysql_manager()
                with mm:
                    sql = 'select * from em_info where em_ip = %s'
                    result = mm.exe_db(sql, ip)
                    if mm.cur.rowcount == 0:
                        print('无法查询到内容')
                        reply = QMessageBox.about(self, '提示', '无法查询到任何IP内容')
                        self.query_lineEdit.setText('')
                    else:
                        self.model = QStandardItemModel(mm.cur.rowcount, 7)
                        # 数据模型抬头
                        title = [
                            '姓名', '部门', 'IP地址', 'MAC地址', '房间号', '交换机地址',
                            '交换机端口'
                        ]
                        self.model.setHorizontalHeaderLabels(title)
                        num = 0
                        for i in result:
                            item0 = QtGui.QStandardItem(i[0])
                            item1 = QtGui.QStandardItem(i[1])
                            item2 = QtGui.QStandardItem(i[2])
                            item3 = QtGui.QStandardItem(i[3])
                            item4 = QtGui.QStandardItem(i[4])
                            item5 = QtGui.QStandardItem(i[5])
                            item6 = QtGui.QStandardItem(i[6])

                            self.model.setItem(num, 0, item0)
                            self.model.setItem(num, 1, item1)
                            self.model.setItem(num, 2, item2)
                            self.model.setItem(num, 3, item3)
                            self.model.setItem(num, 4, item4)
                            self.model.setItem(num, 5, item5)
                            self.model.setItem(num, 6, item6)
                            num += 1
                        self.tableView.setModel(self.model)
Пример #28
0
    def get_sw_info(self):
        # 先删除核心交换机
        if '172.31.64.1' in self.sw_list:
            self.sw_list.remove('172.31.64.1')

        flag = 0  # 最多循环三次 列表为空,自动跳出
        while flag < 3:
            for ip in self.sw_list:
                try:
                    # 使用transport多个命令操作 固定写法
                    # 首先获取交换机名称
                    ts = paramiko.Transport(ip, 22)
                    ts.connect(username='******', password='******')
                    ssh = paramiko.SSHClient()
                    ssh._transport = ts
                    cmd = 'display cur | in sysname'
                    stdin, stdout, stderr = ssh.exec_command(cmd)
                    # 将结果分解成列表
                    # 取得sysname的下标,下标+1就是交换机名称

                    result = stdout.read().decode().split()
                    num = 0
                    for i in result:
                        if i == 'sysname':
                            break  # 跳出循环num不再累加
                        else:
                            num += 1
                    name = result[num+1]
                    print(f'交换机名称{name}')

                    # 获取交换机名称和版本
                    ts = paramiko.Transport(ip, 22)
                    ts.connect(username='******', password='******')
                    ssh = paramiko.SSHClient()
                    ssh._transport = ts
                    cmd = 'display version'  # 注意大小写
                    stdin, stdout, stderr = ssh.exec_command(cmd)
                    result = stdout.read().decode()
                    if 'H3C' in result:
                        brand = 'H3C'
                    else:
                        brand = 'Huawei'
                    version = result.split('Version')[1].split()[0]
                    print(f'交换机品牌{brand}')
                    print(f'交换机版本{version}')

                    # 将IP,名称,品牌,版本写入数据库
                    mm = Mysql_manager()
                    sql = 'insert ignore into jiguan_switch values(0,%s,%s,%s,%s)'
                    with mm:
                        mm.exe_db(sql, (name, ip, brand, version))
                    self.sw_list.remove(ip)
                except:
                    print('连接当前服务器失败')
            if self.sw_list == []:
                break
            flag += 1
        if self.sw_list:
            print(f'下列交换机无法连接上{self.sw_list}')
        else:
            print('交换机信息更新成功')