zoukankan      html  css  js  c++  java
  • 系统结构综合实践-第五次作业

    构建镜像

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

  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/WAYNEEZHONG/p/12919465.html
Copyright © 2011-2022 走看看