• 第5次实践作业


    1.项目结构

    ├── app
    │   ├── cvv.py
    │   ├── date.py
    │   ├── hello.py
    │   ├── mysql1.py
    │   ├── mysql2.py
    │   ├── mysql3.py
    │   ├── mysql4.py
    │   ├── mysql5.py
    │   ├── mysql6.py
    │   └── test.jpg
    ├── Dockerfile
    └── requirements.txt
    

    2.搭建python镜像

    • (1)requirements.txt
    PyMySQL
    opencv-python
    
    • (2)Dockerfile
    FROM python
    MAINTAINER y00
    WORKDIR /app     #工作目录
    COPY ./requirements.txt /requirements.txt  #添加依赖文件
    RUN pip install -r /requirements.txt -i https://pypi.douban.com/simple  #修改源并安装依赖
    ENTRYPOINT [ "python" ]  # 实现命令行式调用容器
    CMD [ "hello.py" ]  #设置ENTRYPOINT默认参数
    
    • (3)搭建镜像
    sudo docker build -t docker-python .
    

    3.简单程序的部署运行

    • (1)helloworld
    # hello.py
    print('hello world')
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app docker-python hello.py
    

    • (2)日历输出
    # date.py
    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    
    sudo docker run -it --rm -v /home/y00/docker-python/app:/app docker-python date.py
    

    • (3)mysql数据库操作

    先开启一个数据库容器,可以用之前搭建好的

    ①测试数据库连接

    #mysql1.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
     
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)
     
    # 关闭数据库连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql1.py
    

    ②新建表

    #mysql2.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
     
    # 关闭数据库连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql2.py
    

    ③表中插入数据

    #mysql3.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('y00', '000', 20, 'F', 2000)"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql3.py
    

    ④获取数据库某个表的记录

    #mysql4.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE 
           WHERE INCOME > %s" % (1000)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          fname = row[0]
          lname = row[1]
          age = row[2]
          sex = row[3]
          income = row[4]
           # 打印结果
          print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % 
                 (fname, lname, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
     
    # 关闭数据库连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql4.py
    

    ⑤将 表中 SEX 为 'M' 的 AGE 字段递增 1

    #mysql5.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
    
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql5.py
    

    ⑥删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据

    #mysql6.py
    #!/usr/bin/python3
     
    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect(host="192.168.0.110",user="docker",password="123456",database="docker_mysql" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
     
    # 关闭连接
    db.close()
    
    sudo docker run --rm -v /home/y00/docker-python/app:/app --link=mysql1:mysql1 docker-python mysql6.py
    

    • (4)opencv程序

    函数 cv2.moments() 会将计算得到的矩以一个字典的形式返回

    #cvv.py
    import cv2
    import numpy as np
    
    img = cv2.imread('test.jpg',0)
    ret,thresh = cv2.threshold(img,127,255,0)
    contours,hierarchy = cv2.findContours(thresh, 1, 2)
    
    cnt = contours[0]
    M = cv2.moments(cnt)
    print (M)
    

    4.出现的错误及解决方法

    • (1)部署日历输出程序出错

    docker run 后面应加-it,表示声明需要交互式终端,然后才可以输入

    • (2)部署opencv程序出错

    把程序命名成了cv2.py,这和python库中的程序命名相同,编译的时候会报错,把cv2.py改成cvv.py就可以了

    5.时间花费

    项目 时间(估算)
    搭建镜像 30min
    各个程序部署运行 3h
    写博客 30min
  • 相关阅读:
    C#设计模式学习笔记-单例模式
    面向对象的七种设计原则
    继承 示例1
    继承和多态的那些事
    体检套餐管理项目
    魔兽登录系统
    清空表
    mysql批量插入
    mkdir用大括号同时建立多个同级和下级目录
    linux查看机器位数
  • 原文地址:https://www.cnblogs.com/YU0000/p/12904703.html
Copyright © 2020-2023  润新知