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

news2024/9/20 16:35:32

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# ls
     django-comment-migrate   django_dmPython2.0.0   django_dmPython3.0.0  'DM8 - dmPython.pdf'   dmPython   sqlalchemy   sqlalchemy1.4.6   sqlalchemy2.0.0
    

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

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

相关文章

完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (二) 源码架构流程梳理、代码编写

目录 1 视频解码代码编写----利用jetson-ffmpeg 1.1 nvstream中视频解码的代码流程框架 1.1.1 类的层次关系 1.1.2 各个类的初始化函数调用层次关系 1.1.3 各个类的process函数调用层次关系 1.2 编写视频解码代码 1.2.1 修改VideoInfo结构体定义 1.2.2 修改解封装代码 …

Kafka【五】Buffer Cache (缓冲区缓存)、Page Cache (页缓存)和零拷贝技术

【1】Buffer Cache (缓冲区缓存) 在Linux操作系统中,Buffer Cache(缓冲区缓存)是内核用来优化对块设备(如磁盘)读写操作的一种机制(故而有一种说法叫做块缓存)。尽管在较新的Linux内核版本中&a…

Spring Cloud全解析:熔断之Hystrix服务监控

Hystrix服务监控 Hystrix除了熔断降级之外,还提供了准实时的调用监控,持续的记录所有通过Hystrix发起的请求的执行信息,并以统计报表的形式展示出来,包括有每秒执行多少请求,多少成功,多少失败等&#xff…

【C++】vector类:模拟实现(适合新手手撕vector)

在实现本文的vector模拟前,建议先了解关于vector的必要知识:【C】容器vector常用接口详解-CSDN博客https://blog.csdn.net/2301_80555259/article/details/141529230?spm1001.2014.3001.5501 目录 一.基本结构 二.构造函数(constructor&…

【算法】位运算

【ps】本篇有 10 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)位1的个数 .1- 题目解析 .2- 代码编写 2)比特位计数 .1- 题目解析 .2- 代码编写 3)汉明距离 .1- 题目解析 .2- 代码编写 4)只出现一次的数字 .…

3000字带你了解SD提示词用法,一点就通,小白轻松上手(附提示词生成器)(1.4 SD提示词运用)

提示词是什么 提示词是我们向AI模型发出的指令。正确的提示词能让AI准确反馈所需的输出,而优质的提示词则能使AI生成的内容更优质、更符合你的期望。这与编写程序代码颇为相似,准确的代码逻辑是程序正常运行的前提,而优秀的代码则能减少运行…

知识付费小程序源码轻松实现一站式运营,开启知识变现之旅

技术栈: 以下是一个简单的知识付费小程序的示例代码: app.js:小程序的入口文件 App({onLaunch: function () {// 在小程序启动时执行的代码},globalData: {// 存储全局数据userInfo: null // 用户信息} })pages/index/index.js&#xff1…

【学术会议征稿】第四届智能电网与能源互联网国际会议(SGEI 2024)

第四届智能电网与能源互联网国际会议(SGEI 2024) 2024 4th International Conference on Smart Grid and Energy Internet 为交流近年来国内外在智能电网和能源互联网领域的理论、技术和应用的最新进展,展示最新成果,由沈阳工业…

Visual Studio 2022 下载和安装

文章目录 概述一,下载步骤二,安装过程 概述 Visual Studio 提供 AI 增强功能,例如用于上下文感知代码补全的 IntelliSense 和可利用开源代码中的 AI 模式的 IntelliCode。 集成的 GitHub Copilot 提供 AI 支持的代码补全、聊天辅助、调试建议…

ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序

文章目录 前言5 RestClient操作文档5.4 删除文档5.4 修改文档5.5 批量导入文档 6 DSL查询文档6.1 准备工作6.2 全文检索查询6.3 精准查询6.4 地理坐标查询6.5 复合查询6.5.1 相关性算分6.5.2 布尔查询 7 搜索结果处理7.1 排序7.1.1 普通字段排序7.1.2 地理坐标排序 前言 Elast…

qmt量化交易策略小白学习笔记第59期【qmt编程之期权数据--获取指定期权品种的详细信息--原生Python】

qmt编程之获取期权数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 基于BS模型计算欧式期权理论价格 基于Black-Scholes-Merton模型,输入期权标的价格、期权行权价、无风险利率…

Mac 安装Hadoop教程(HomeBrew安装)

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop,便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop,你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 安装JDK8。 2.2 配置ssh环境…

从腰子的营养成分来分析腰子能否“壮阳”,健康地吃腰子。

文章目录 引言I 腰子的营养优点缺点吃腰子无“壮阳”效果II 健康地吃腰子食用前充分清洗浸泡高尿酸及痛风群体慎吃适量吃引言 很多人认为动物内脏有着“以形补形”的好处,如吃动物腰子,能补肾、壮阳,这让很多人对“腰子”非常热爱。 腰子的营养到底如何?经常吃腰子对身体…

优思学院:FMEA与FTA故障树方法对比:工程师必须知道的关键点!

故障树分析(Fault Tree Analysis, FTA)以某个不希望发生的产品故障事件或严重的系统风险(即顶事件)为分析对象,通过自上而下的分层次因果逻辑分析,逐步找出导致故障事件的必要且充分的直接原因,…

日程安排组件DHTMLX Scheduler v7.1 - 支持RFC-5545格式

DHTMLX Scheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天、周、月三个种视图显示。 此版本包括几个备受期待的特性,可以帮助用户增强DHTMLX…

基于php+vue+uniapp的医院预约挂号系统小程序

开发语言:PHP框架:phpuniapp数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PhpStorm 系统展示 后台登录界面 管理员功能界面 用户管理 医生管理 科室分类管理 医生信息管理 预…

30s到0.8s,记录一次接口优化成功案例!

大家好,我是沐子,推荐一个程序员免费学习的编程网站 我爱编程网(www.love-coding.com) ** 场景** 在高并发的数据处理场景中,接口响应时间的优化显得尤为重要。本文将分享一个真实案例,其中一个数据量达到…

(5) 归并排序

归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父 John_von_Neumann 在 1945 年发明,被用在了 E…

【Python】Python 读取Excel、DataFrame对比并选出差异数据,重新写入Excel

背景:我在2个系统下载出了两个Excel,现在通过对下载的2个Excel数据,并选出差异数据 从新写入一个新的Excel中 differences_url rC:\Users\LENOVO\Downloads\differences.xlsx; //要生成的差异Excel的位置及名称 df1_url rC:\Users\LENOVO\Dow…

终于知道如何简化时间序列的特征工程了!

在处理时间序列数据时,时间特征往往是最基础且独特的要素,我们的目标通常是预测某种未来的响应或结果。 不过在很多情况下,除了时间特征之外,我们还能获取到一系列其他相关的特征或变量。 时间序列数据中的特征工程涉及从原始时…