python05

python基础 (v3.6.6)
day05


1. 异常处理

        try:
            可能发生异常的代码
        except:
            出现异常后的处理代码


    1-1. 异常调试

        try:
            age = int("gvre")
        except:
            print("输入的信息有误")


    1-2. 输出异常信息

        try:
            age = int("gvre")
        except Exception as msg:
            print("错误信息:\n",msg)


    1-3. 输出完整的异常信息

        import traceback
        try:
            age = int("gvre")
        except Exception as msg:
            print("完整错误信息:\n",traceback.format_exc())


    1-4. try-except-else语句(很少使用):如果程序没有异常,才执行else里面的内容

        try:
            age = int("666")
        except Exception as msg:
            print("错误信息:\n",msg)
        else:
            print("程序运行正常")


    1-5. try-except-finally(很少使用):无论程序是否异常,都执行finally里面的内容

        try:
            age = int("666a")
        except Exception as msg:
            print("错误信息:\n",msg)
        finally:
            print("无论try里面是否异常,我都执行")


    1-6. raise Exception("自定义异常信息") 

        主动抛出异常,后续代码都不运行了,(实际较少使用)

        print("开始程序")
        for i in range(1,3):
            print(i)
            raise Exception("主动抛出异常,程序结束啦")
        print("这里的代码不执行啦")


    1-7. 补充(了解): for-else  

        如果for循环正常结束,else中语句执行。如果是break终止的,else则不执行。

        for i in range(1,6):
            if i == 3:
                print(i)
                break
        else:
            print("for循环走完了呢")

        注:while循环也可用 while-else,作用一样的


2. MySQL操作

    2-1. 安装(mysql-connector和pymysql任选一种)

        mysql-connector安装: pip install mysql-connector  

        pymysql安装:   pip install pymysql

        pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple
        pip install -i http://pypi.douban.com/simple --trusted-host pipy.douban.com 库名

        在线安装或使用国内源安装

        验证安装是否成功(不报错):
            import mysql.connector
            import pymysql 
            安装成功后,在python/lib/site-package下面会多出mysql相关文件夹


    2-2. 连接MySQL

        # 1. mysql-connector的连接

            import mysql.connector

            mydb = mysql.connector.connect(
                host = "211.149.163.145",
                port = "3306",            # 默认端口可省略
                user = "test",
                passwd = "test123",
                database = "test")

            mycursor = mydb.cursor()    # 创建操作集(游标)    


        # 2. pymysql的连接 

            import pymysql

            mydb2 = pymysql.connect(
                host = "211.149.163.145",
                port = 3306,        
                user = "test",
                passwd = "test123",
                database = "test",
                cursorclass = pymysql.cursors.DictCursor) 

                # 最后一行cursorclass = pymysql.cursors.DictCursor表示返回字典格式,
                    如果不加,默认返回的是元组格式

            mycursor = mydb2.cursor()    # 创建操作集(游标) 

            mycursor2 = mydb2.cursor(pymysql.cursors.DictCursor)  
                # 返回字典格式的设置,也可以在创建游标时加上


    2-3. 插入数据

        # sql = "insert into student values(6,'橘子','男',666);"
        # mycursor.execute(sql)

        # 如果对sql语句格式化,无论字符串还是整形,都用%s代替
        sql2 = "insert into student values(%s,%s,%s,%s);"
        values = (7,"橘子2","男",666)
        mycursor.execute(sql2,values)        

        print("插入了%d条数据"%mycursor.rowcount)

        mydb.commit()    # 修改数据需要提交事务


        # 一次插入多条数据(了解)
            sql2 = "insert into student values(%s,%s,%s,%s);"
            values2 = [(8,"橘子3","男",666),(9,"橘子5","男",666)]

            mycursor.executemany(sql2,values2)    # 插入多条数据executemany()


    2-4. 查询数据

        sql = "select * from student where sname like '橘子%';"
        mycursor.execute(sql)
        res = mycursor.fetchall()  # 获取所有记录

        print(res)     # 以列表形式打印结果,或使用下面的for循环逐条打印
        for ele in res:
            print(ele)

        # 可以根据情况断言
        exceptResult = "橘子"
        if exceptResult in str(res):
            print(True)
        else:
            print(False)

        注:pymysql默认返回元组格式,可以设置为字典


    2-5. 修改数据

        sql = "update student set gender = '哈哈' where sname like '橘子%';"
        mycursor.execute(sql)
        print("修改了%d条数据"%mycursor.rowcount)

        mydb.commit()    # 修改数据需要提交事务


    2-6. 删除数据

        sql = "delete from student where sname like '橘子%';"
        mycursor.execute(sql)
        print("删除了%d条数据"%mycursor.rowcount)

        mydb.commit()    # 修改数据需要提交事务

    2-7. 关闭数据库连接(了解)

        mycursor.close()    # 关闭游标
        mydb.close()        # 关闭数据库连接


3. 多线程


    ## 1.串行代码
        '''
        import time
        def task1():
            for i in range(2):
                print("任务1启动",time.ctime())
                time.sleep(2)
                print("任务1结束",time.ctime())
        def task2():
            for i in range(2):
                print("任务2启动",time.ctime())
                time.sleep(1)
                print("任务2结束",time.ctime())
        task1()
        task2()
        print("主线程结束,已退出")
        '''

    ## 2.串行代码优化
        '''
        import time
        def task(taskName,stime):
            for i in range(2):
                print("%s启动"%taskName,time.ctime())
                time.sleep(stime)
                print("%s结束"%taskName,time.ctime())

        if __name__ == "__main__":
            task("任务1",2)
            task("任务2",1)
            print("主线程结束,已退出")
            # 注:当前只有1个线程:主程序
        '''

    ## 3.任务并行执行,引入多线程
        '''
        import threading
        import time
        def task(taskName,stime):
            for i in range(2):
                print("%s启动"%taskName,time.ctime())
                time.sleep(stime)
                print("%s结束"%taskName,time.ctime())

        if __name__ == "__main__":
            # 创建线程
            t1 = threading.Thread(target=task,args=("任务1",2))
            t2 = threading.Thread(target=task,args=("任务2",1))
            # 启动线程
            t1.start()
            t2.start()
            print("主线程结束,已退出")
            # 注:当前有3个线程:1个主程序,两个创建的子线程
        '''

    ## 4.加入守护线程
        '''
        import threading
        import time
        def task(taskName,stime):
            for i in range(2):
                print("%s启动"%taskName,time.ctime())
                time.sleep(stime)
                print("%s结束"%taskName,time.ctime())

        if __name__ == "__main__":
            # 创建线程
            t1 = threading.Thread(target=task,args=("任务1",2))
            t2 = threading.Thread(target=task,args=("任务2",1))
            # 启动线程
            t1.start()
            t2.start()
            # 守护线程
            t1.join()
            t2.join()
            print("主线程结束,已退出")
            # 注:当前有3个线程:1个主程序,两个创建的子线程
        '''

    ## 5.批量创建线程
        '''
        import threading
        import time
        def task(taskName,stime):
            for i in range(2):
                print("%s启动"%taskName,time.ctime())
                time.sleep(stime)
                print("%s结束"%taskName,time.ctime())

        # 任务列表
        taskList = [("任务1",2),("任务2",1)]

        # 根据任务列表,批量创建线程
        def createThread():
            threadsList = []
            for job in taskList:
                t = threading.Thread(target=task,args=job)
                threadsList.append(t)
            return threadsList

        if __name__ == "__main__":
            threads = createThread()
            # 启动线程
            for thread in threads:
                thread.start()
            # 守护线程
            for thread in threads:
                thread.join()
            print("主线程结束,已退出")
        '''

    ## 6.使用面向对象的方式启动多线程(了解)
        '''
        import threading,time

        class MyThread(threading.Thread):
            def __init__(self,taskName,stime):
                # 显示调用父类的构造函数
                super().__init__()
                self.taskName = taskName
                self.stime = stime

            # 执行任务的函数: run() ,必须是run()
            def run(self):
                task(self.taskName,self.stime)

        def task(taskName,stime):
            for i in range(2):
                print("%s启动"%taskName,time.ctime())
                time.sleep(stime)
                print("%s结束"%taskName,time.ctime())

        # 任务列表
        taskList = [("任务1",2),("任务2",1)]

        # 根据任务列表,批量创建线程
        def createThread():
            threadsList = []
            for job in taskList:
                # 实例化MyThread类来创建线程
                t = MyThread(job[0],job[1])
                threadsList.append(t)
            return threadsList

        if __name__ == "__main__":
            threads = createThread()
            # 启动线程
            for thread in threads:
                thread.start()
            # 守护线程
            for thread in threads:
                thread.join()
            print("主线程结束,已退出")
        '''


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值