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
4、遇到的问题
执行python连接sql出现的错误
解决办法是在requirements.txt加上cryptography来安装依赖包
5、时间花费
实验 | 4h |
博客 | 1h |