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

 

posted @ 2020-05-18 19:09  Gallium-697  阅读(175)  评论(0编辑  收藏  举报