系统结构综合实践-第五次作业
构建镜像
使用Dockerfile构建镜像
#基础镜像
FROM python
#默认工作目录
WORKDIR /usr/local/ex5_file
#不明原因换源失败,只好手动换源
RUN pip install PyMySQL -i https://pypi.tuna.tsinghua.edu.cn/simple && pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
运行容器
使用--link命令连接到第二次实验的数据库容器中
具体的连接方法,参考博客
https://www.cnblogs.com/shenh/p/9714547.html
开启MySQL容器
进入到python容器中
hello-world
print("hello world!")
数据库操作
先查看数据库容器中已有的数据库和表
数据库操作的写法参考了菜鸟教程
https://www.runoob.com/python3/python3-mysql.html
mydatabase.py
import pymysql
# 打开数据库连接
db = pymysql.connect(host="msql",user="root",passwd="wayne",db="docker_mysql",port=3306)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS Book")
# 使用预处理语句创建表
sql = """CREATE TABLE Book (
ID CHAR(20) NOT NULL,
BOOKNAME CHAR(20) NOT NULL )"""
cursor.execute(sql)
# SQL 插入语句
sql = """INSERT INTO BooK(ID,BOOKNAME)
VALUES ('0001', 'JAVA')"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
sql = """INSERT INTO Book(ID,BOOKNAME)
VALUES ('0002', 'PYTHON')"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# SQL 查询语句
sql = "SELECT * FROM Book "
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
ID = row[0]
BOOKNAME = row[1]
# 打印结果
print ("id=%s,bookname=%s" % \
(ID, BOOKNAME))
except:
print ("Error: unable to fetch data")
# SQL 更新语句
sql = "UPDATE Book SET BOOKNAME ='JAVAWEB' WHERE ID = '%s'" % ('0001')
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()
# SQL 查询语句
sql = "SELECT * FROM Book "
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
ID = row[0]
BOOKNAME = row[1]
# 打印结果
print ("id=%s,bookname=%s" % \
(ID, BOOKNAME))
except:
print ("Error: unable to fetch data")
# 关闭数据库连接
db.close()
执行结果
查看数据库容器的变化
日历
import calendar
year_ =int(input("输入年份:"))
month_ =int(input("输入月份:"))
print(calendar.month(year_,month_))
openCV
import cv2
# flags传入0表示灰度图像, 1表示彩色图像
img=cv2.imread('005.jpg',flags=1)
# 获取图片尺寸
rows,cols=img.shape[:2]
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(cols,rows))
# 写入文件
cv2.imwrite("test-rotated.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
print('rotated and saved.')
碰到的问题
1.
pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'172.17.0.3' (using password: YES)")
显示数据库连接失败
查看原因是root密码的认证方式有问题
在数据库容器中输入
ALTER USER 'root'@'172.17.0.3' IDENTIFIED WITH mysql_native_password BY 'root'
更改原先的认证方式caching_sha2_password,换成mysql_native_password就可以解决
总结一哈
本次实验:查阅资料+操作+debug+写博客,用时大约4小时,算是完成的最快的一次实验了