zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第5次实践作业

    1、项目结构

     

    2、构建容器

    (1)Dockfile

    FROM python
    MAINTAINER gavin
    WORKDIR /pyfile
    COPY requirements.txt ./   #依赖模块列表
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple  #修改源并安装依赖
    ENTRYPOINT [ "python" ]  # 实现命令行式调用容器
    CMD [ "hello.py" ]  #设置ENTRYPOINT默认参数

    (2)requirements.txt

    PyMySQL
    cryptography #连接sql
    opencv-python

    (3)建立镜像

    docker build -t py-test .

    3、程序部署

    (1)helloword

    docker run --rm -v /home/gavin/python/pyfile:/pyfile py-test hello.py

    --rm:运行结束后删除容器

     

    (2)日历输出

    date.py

    # 引入日历模块
    import calendar
     
    # 输入指定年月
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
     
    # 显示日历
    print(calendar.month(yy,mm))
    
    docker run -it --rm -v /home/gavin/python/pyfile:/pyfile py-test date.py

    -it:有交互式输入

     

    (3)mysql操作

    运行mysql容器

    docker run -itd --name pymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

    测试与sql连接

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("pymysql","root","123456","python" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
     
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)
     
    # 关闭数据库连接
    db.close()

    运行python容器

    docker run -it --rm -v /home/gavin/python/pyfile:/pyfile --link=pymysql:pymysql py-test connection.py

    创建数据库表和插入数据db.py

    import pymysql
    # 打开数据库连接
    db = pymysql.connect("pymysql","root","123456","python" )
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             NAME  CHAR(20) NOT NULL,
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(NAME,
             AGE, SEX, INCOME)
             VALUES ('Gavin', 20, 'M', 1000000)"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()

    python查询数据search.py

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("pymysql","root","123456","python" )
     
    # 使用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:
          name = row[0]
          age = row[1]
          sex = row[2]
          income = row[3]
           # 打印结果
          print ("name=%s,age=%s,sex=%s,income=%s" % 
                 (name, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
     
    # 关闭数据库连接
    db.close()

    (4)opencv操作

    opency.py

    #截取图片的一部分,即ROI(region of interest)
    #因为在python cv2中图片以ndarray格式表示,所以直接用ndarray的#分片方式能非常容易的截取ROI,跟python中list的分片用法一样,只不过
    #这个是在二维数组上分片crop = image[0:201, 100:301] #分片都是不包含后面一个参数的,所以多1
    import cv2
    import numpy as np
    image = cv2.imread('test.jpg')
    crop = image[0:201, 100:301]
    cv2.imwrite('test_crop.jpg', crop)

    test.jps

     

    输出后的test_crop.jps

    4、遇到的问题

    执行python连接sql出现的错误

    解决办法是在requirements.txt加上cryptography来安装依赖包

    5、时间花费

    实验 4h
    博客 1h
  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/gallium697/p/12912474.html
Copyright © 2011-2022 走看看