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


    构建镜像

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

  • 相关阅读:
    语言混编总结二
    可执行文件与符号(表)
    iOS错误报告中关于崩溃地址的分析
    Find the build UUID in a Crash Report
    Symbolicating Crash Reports With atos
    iOS crash log 解析 symbol address = stack address
    Address space layout randomization
    ASLR(Address space layout randomization)地址空间布局随机化
    缓冲区溢出详解
    如何快速查看将C反汇编的代码
  • 原文地址:https://www.cnblogs.com/WAYNEEZHONG/p/12919465.html
Copyright © 2020-2023  润新知