系统结构综合实践-第五次作业

构建镜像

使用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小时,算是完成的最快的一次实验了

posted @ 2020-05-19 20:56  WAYNEEZHONG  阅读(171)  评论(0编辑  收藏  举报