docker制作达梦数据库驱动的Python镜像记录

docker制作达梦数据库驱动的Python镜像记录

使用Sqlalchemy ORM 操作达梦
提供构建好的docker镜像 docker pull chongjing001/python:3.12 使用虚拟环境(source /venv/bin/activate) 后pip其他库

镜像中安装Python参考上一篇

下载DM8安装包
版本选择

官网

在这里插入图片描述

Linux安装包只有 rhel6/7这里选择7下载

2024 8 月记

亲测:红帽7可以在Ubuntu镜像中安装

解压并获取安装文件

建议在windows下解压并提取安装文件后copy至容器中
在这里插入图片描述

windows下可直接双击挂载iso
在这里插入图片描述

  • copy至docker容器中
    docker cp DMInstall.bin 容器名:目录
准备工作
创建dmdba 用户

没有dmdba用户安装程序不能运行。。。

# 创建用户所在的组
groupadd dinstall -g 2001# 创建用户
useradd  -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
执行安装命令

./DMInstall.bin -i

输出:

root@1abcc8c919ce:/# ./DMInstall.bin -i                        
安装语言:                                                          
[1]: 简体中文                                                      
[2]: English                                                   
请选择安装语言 [1]:1                                                  
解压安装程序.........                                                
硬件架构校验通过!                                                      
欢迎使用达梦数据库安装程序                                                  是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n                             是否设置时区? (Y/y:是 N/n:否) [Y/y]:n                                  安装类型:                                                          
1 典型安装                                                         
2 服务器                                                          
3 客户端                                                          
4 自定义                                                          
请选择安装类型的数字序号 [1 典型安装]:4                                        
1 服务器组件                                                        
2 客户端组件                                                        2.1 DM管理工具                                                   2.2 DM性能监视工具                                                 2.3 DM数据迁移工具                                                 2.4 DM控制台工具                                                  2.5 DM审计分析工具                                                 2.6 SQL交互式查询工具                                               
3 驱动                                                           
4 用户手册                                                         
5 数据库服务                                                        5.1 实时审计服务                                                   5.2 作业服务                                                     5.3 实例监控服务                                                   5.4 辅助插件服务                                                   
请选择安装组件的序号 (使用空格间隔) [1 2 3 4 5]:3                              
所需空间: 776M                                                     请选择安装目录 [/opt/dmdbms]:                                         
可用空间: 935G                                                     
是否确认安装路径(/opt/dmdbms)? (Y/y:是 N/n:否)  [Y/y]:y                  安装前小结                                                          
安装位置: /opt/dmdbms                                              
所需空间: 776M                                                     
可用空间: 935G                                                     
版本信息:                                                          
有效日期:                                                          
安装类型: 自定义                                                      
是否确认安装? (Y/y:是 N/n:否):y                                        
2024-09-03 13:55:58                                            
[INFO] 安装达梦数据库...                                              
2024-09-03 13:55:58                                            
[INFO] 安装 基础 模块...                                             
2024-09-03 13:56:01                                            
[INFO] 安装 驱动 模块...                                             
2024-09-03 13:56:03                                            
[INFO] 移动日志文件。                                                 
2024-09-03 13:56:03                                            
[INFO] 安装达梦数据库完成。                                              安装结束                                                           
设置系统变量
  • /etc/environment 增加以下内容
DM_HOME="/opt/dmdbms"
LD_LIBRARY_PATH="/opt/dmdbms/bin"
  • /root/.bashrc 增加以下内容
# Load system-wide environment variables 
. /etc/environment
  • 数据库安装bin目录下拷贝libcrypto.so/usr/lib /usr/lib64
    • 我这里是/opt/dmdbms/bin
cp /opt/dmdbms/bin/libcrypto.so /usr/lib
cp /opt/dmdbms/bin/libcrypto.so /usr/lib64
安装sqlalchemy-dm
初始化虚拟镜像

python3 -m venv venv

如果没有安装python3-venv 根据提示安装

  • 激活虚拟环境

    • source venv/bin/activate
  • 安装 setuptools

    • pip install setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple
安装dmPython

pip install dmPython -i https://pypi.tuna.tsinghua.edu.cn/simple

sqlalchemy-dm
  • 先安装sqlalchemy

    • pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 进入Python驱动目录(sqlalchemy2.0.0)

    • cd /opt/dmdbms/drivers/python/sqlalchemy2.0.0/

    • 目前sqlalchemy model层中自增主键在插入时会出现错误: [CODE:-2106]无效的表或视图名

      处理办法,修改 sqlalchemy_dm 目录下base.py源码

      # 将base.py源码中 _set_autoinc_col_from_lastrowid方法中 table.name改为table.fullname就可以了# statement = "select {} from {} where rowid = {}".format(autoinc_col.name, table.name, lastrowid)
      # 改成
      statement = "select {} from {} where rowid = {}".format(autoinc_col.name, table.fullname, lastrowid)
    • 返回上一级 python setup.py install

测试
from sqlalchemy import create_engine, Index, ForeignKey, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import Column, Integer, String# 创建基类
Base = declarative_base()
db_schema = 'hello'class BaseModel(Base):__abstract__ = True__table_args__ = {"schema": db_schema}class Task(BaseModel):__tablename__ = 'tb_task'id = Column(Integer, primary_key=True)name = Column(String(50))medias = relationship('TaskMedias', backref=f'task')class TaskMedias(BaseModel):__tablename__ = 'tb_task_medias'id = Column(Integer, primary_key=True)guid = Column(String(50))task_id = Column(Integer, ForeignKey(f'{db_schema}.tb_task.id'))# 添加索引,达梦不支持在create table时添加索引,所以这里放在这里单独添加__table_args__ = (Index('idx_guid', 'guid', unique=True),{"schema": db_schema},)# 创建数据库引擎
engine = create_engine(f"dm+dmPython://SYSDBA:SYSDBA@172.16.147.212:5237", echo=True)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()session.execute(text(f"CREATE SCHEMA {db_schema}"))print(session.execute(text('SELECT SF_GET_CASE_SENSITIVE_FLAG()')).scalar())# 创建所有表
Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)t = Task(name='task1')
session.add(t)
session.commit()query_data = session.query(Task).all()
print(query_data)
删除安装文件DMInstall.bin
删除多余安装文件,镜像瘦身
  • /opt/dmdbms目录下只保留drivers

    root@1abcc8c919ce:/opt# du -lh --max-depth=1
    1.7G    ./dmdbms
    1.7G    .root@1abcc8c919ce:/opt# cd dmdbms/
    root@1abcc8c919ce:/opt/dmdbms# du -lh --max-depth=1
    1.1M    ./samples
    48K     ./desktop
    47M     ./uninstall
    52K     ./script
    316M    ./drivers
    44K     ./jar
    145M    ./jdk
    298M    ./include
    152K    ./log
    872M    ./bin
    1.7G    .
  • drivers目录下只保留python

    root@1abcc8c919ce:/opt/dmdbms/drivers# du -lh --max-depth=1
    162M    ./logmnr
    5.4M    ./jdbc
    22M     ./fldr
    24M     ./dotNet
    208K    ./go
    3.0M    ./python
    4.6M    ./php_pdo
    21M     ./msgparse
    18M     ./odbc
    51M     ./dpi
    6.4M    ./r2dbc
    316M    .
    
  • python目录下根据使用驱动保留

    (venv) root@1abcc8c919ce:/opt/dmdbms/drivers/python# lsdjango-comment-migrate   django_dmPython2.0.0   django_dmPython3.0.0  'DM8 - dmPython.pdf'   dmPython   sqlalchemy   sqlalchemy1.4.6   sqlalchemy2.0.0
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础笔记

一、python基础1.1 基础知识1.1.1 注释 注释:在程序中对程序代码进行解释说明的文字。 作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性…

基于yolov8的红绿灯目标检测训练与Streamlit部署(代码+教程)

项目背景 随着智能交通系统的快速发展,自动驾驶技术逐渐成为研究的热点。在自动驾驶领域中,准确识别道路上的交通信号灯是确保车辆安全行驶的关键技术之一。近年来,深度学习技术的发展为交通信号灯的识别提供了强大的支持。YOLO(…

集成电路学习:什么是I/O输入输出

I/O:输入输出 I/O,全称Input/Output,即输入输出,是信息处理系统(如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信方式。具体来说,输入是系统接收的信号或数…

【Java那些事】关于Git的使用

目录 下拉代码仓库篇 上传代码篇 下拉代码仓库篇 第一步,下拉代码,复制链接。 (从开源网站上复制链接) (建立本地仓库) 这里的URL一般都会自动填充刚刚复制的链接【瞅瞅,确保是想要的那个项…

MATLAB中的线性规划与非线性规划

目录 1. 引言 2. 线性规划(LP) 2.1 线性规划的基本概念 2.2 MATLAB中的线性规划求解 2.3 线性规划的应用 3. 非线性规划(NLP) 3.1 非线性规划的基本概念 3.2 MATLAB中的非线性规划求解 3.3 非线性规划的应用 4. 线性规划…

安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能

随着安防行业的快速发展,视频监控系统已经成为维护公共安全和个人隐私的重要工具。然而,由于各种因素的影响,视频流的质量可能会受到影响,从而导致监控效果不佳。为了解决这一问题,LntonAIServer推出了全新的视频质量诊…

Gitee镜像关联GitHub仓库

申请 GitHub 私人令牌 GitHub 私人令牌用于授予 Gitee 读写 Github 仓库的权限。 1)登录GitHub,通过 个人头像 > Settings > 下拉左侧菜单栏进入 Developer settings。 2)Personal access tokens > Tokens(classic) > Generate …

hackme靶机通关攻略

用nmap扫描端口 进入靶场后在首页注册登录 登录后进行抓包 复制下来保存为txt文档,使用sqlmap进行注入 查数据库(这里是在桌面打开的终端,因为txt文档我是建在桌面的) sqlmap -r \3.txt --current-db 查表 sqlmap -r \3.txt -D …

解密Docker核心:深入理解Docker基础架构

随着云计算技术的普及,Docker容器技术在现代应用开发和部署中占据了重要地位。要充分理解Docker的优势与运用,深入掌握其基础架构是关键。本文将深入探讨Docker的核心组成部分及其在容器化平台中的角色和作用。 一、Docker的基础架构概述 Docker的基础…

Linux 上如何做MySQL数据备份

目录 SQL备份脚本创建crontabcrontab命令总结查看特定目录中的周期性任务 crontab(cron table 的缩写)是 Unix/Linux 系统上用于设置周期性被执行的任务的工具。它允许用户定义需要在特定时间(比如每天凌晨、每周的某个时间等)自动…

16个你必须掌握的Python数据类型

文末赠免费精品编程资料~~ Python,以其简洁的语法和强大的数据处理能力,成为初学者和专业人士的首选语言。数据类型是Python编程的基石,理解它们对于编写高效、清晰的代码至关重要。下面,我们将逐一探索并实践Python中10个核心数…

多模态生成发文量大涨!最新成果统一Transformer和Diffusion,含金量超高

最近多模态生成领域也在“神仙打架”,比如Meta的全新训练方法Transfusion,用单个模型就能同时生成文本和图像! 还有之前华为、清华提出的个性化多模态内容生成技术PMG,生成的内容可“量身定制”,更能满足偏好。 这些…

使用Blender云渲染的好处是什么?

​Blender是一款功能强大的开源3D创作软件,用于包括建模、动画、仿真、渲染、合成和视频编辑在内的多种应用。然而,Blender的渲染过程有时可能非常耗费资源,特别是处理复杂的3D场景时。作为CG行业不可或缺的一部分,云渲染通过使用…

shell脚本1----编程规范与变量

shell脚本 shell的功能 Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执…

【C++11(一)之入门基础)】

文章目录 C简介统一的列表初始化{}初始化 std::initializer_liststd::initializer_list是什么类型:std::initializer_list使用场景: 声明autodecltypenullptr STL中一些变化 C简介 在2003年C标准委员会曾经提交了一份技术勘误表(…

大数据新视界--大数据大厂之MySQL 数据库课程设计:数据安全深度剖析与未来展望

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

一种误差较小的轮廓面积计算算法

1.背景 基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合,形成一个个梯形,每个梯形的面积有符号,累计求和即得到多边形轮廓的面积。详见博主之前的文章, 记录导致计算轮廓面积出错的一个坑点-CSDN博客文章…

项目拆解:短视频冷门赛道—ai绘画+温馨小屋,引流变现全攻略

在这个快节奏的时代,工作、学习、家庭的重担仿佛三座大山,让人喘不过气,心情时常跌入谷底。就像蜗牛遇到威胁会缩进壳里,我们也会在疲惫和忧虑时,渴望一个属于自己的温暖小窝,来安放疲惫的心灵。而自媒体平…

Flink 1.14.* Flink窗口创建和窗口计算源码

解析Flink如何创建的窗口,和以聚合函数为例,窗口如何计算聚合函数 一、构建不同窗口的build类1、全局窗口2、创建按键分流后的窗口 二、在使用窗口处理数据流时,不同窗口创建的都是窗口算子WindowOperator1、聚合函数实现2、创建全局窗口(入参…

SpringFrameWork学习笔记

本笔记基于【尚硅谷新版SSM框架全套视频教程,Spring6SpringBoot3最新SSM企业级开发】https://www.bilibili.com/video/BV1AP411s7D7?vd_sourcea91dafe0f846ad7bd19625e392cf76d8 总结 资料获取网址:https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF 技术…