sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
问题
标题即为问题,
问题出现原因
sqlalchemy对应的sqlalchemy_dm源码需要调整
版本说明
python 3.10
dmPython 2.5.5(2.4.8也可以)
sqlalchemy1.4.52
sqlalchemy_dm1.4.39
环境说明
部署环境 ubuntu20
开发环境window11 wsl2 ubuntu20
可能会出现的报错
AttributeError: module 'sqlalchemy.engine.result'has no attribute 'FullyBufferedResultProxy
找不到dmPython 模块
AttributeError: type object 'DMDialect_dmPython' has no attribute 'dbapi'

(按照我的经验,这些报错都只是dmPython dpi 和sqlalchemy 的兼容问题,尽量使用网络下载的方式安装dmPython)
离线安装方式请划到最后查阅
解决步骤
获取文件(sqlalchemy)
- window版本的dm8,安装一下(可能官网没有了,就联系公司的商务咨询一下,看能不能拿到)
- docker镜像
更改源码
我的需求一共是三个,识别BIGINT,VARCHAR,TINYINT这三个
所以需要调整的文件我列到下面,自行对比差异
sqlalchemy/sqlalchemy_dm/base.py(主要是get_columns需要更改)
@reflection.cachedef get_columns(self, connection, table_name, schema=None, **kw):self.trace_process('DMDialect', 'get_columns', connection, table_name, schema, **kw)"""kw arguments can be:dm_resolve_synonymsdblink"""resolve_synonyms = kw.get('dm_resolve_synonyms', False)dblink = kw.get('dblink', '')info_cache = kw.get('info_cache')(table_name, schema, dblink, synonym) = \self._prepare_reflection_args(connection, table_name, schema,resolve_synonyms, dblink,info_cache=info_cache)columns = []if self._supports_char_length:char_length_col = 'char_length'else:char_length_col = 'data_length'params = {"table_name": table_name}text = "SELECT column_name, data_type, %(char_length_col)s, "\"data_precision, data_scale, "\"nullable, data_default FROM ALL_TAB_COLUMNS%(dblink)s "\"WHERE table_name = :table_name"if schema is not None:params['owner'] = schematext += " AND owner = :owner "text += " ORDER BY column_id"text = text % {'dblink': dblink, 'char_length_col': char_length_col}c = connection.execute(sql.text(text), **params)for row in c:(colname, orig_colname, coltype, length, precision, scale, nullable, default) = \(self.normalize_name(row[0]), row[0], row[1], row[2], row[3], row[4], row[5] == 'Y', row[6])# 添加对 BIGINT 和 VARCHAR 类型的支持if coltype == 'NUMBER':coltype = _DMNumeric(precision, scale)elif coltype in ('VARCHAR2', 'NVARCHAR2', 'CHAR', 'VARCHAR'): # 添加 VARCHARcoltype = self.ischema_names.get(coltype)(length)elif coltype == 'BIGINT': # 添加 BIGINTcoltype = sqltypes.BIGINTelif 'WITH TIME ZONE' in coltype:coltype = TIMESTAMP(timezone=True)else:coltype = re.sub(r'\(\d+\)', '', coltype)try:coltype = self.ischema_names[coltype]except KeyError:util.warn("Did not recognize type '%s' of column '%s'" %(coltype, colname))coltype = sqltypes.NULLTYPEcdict = {'name': orig_colname,'type': coltype,'nullable': nullable,'default': default,'autoincrement': 'auto',}if orig_colname.lower() == orig_colname:cdict['quote'] = Truecolumns.append(cdict)return columns
sqlalchemy/sqlalchemy_dm/types.py(部分需要修改)
ischema_names = {'TINYINT': TINYINT,'BIGINT': BIGINT,'VARCHAR': VARCHAR,'VARCHAR2': VARCHAR,'NVARCHAR2': NVARCHAR,'CHAR': CHAR,'DATE': DATE,'DATETIME': DATETIME,'NUMBER': NUMBER,'BLOB': _DMBLOB,#'BLOB': _DMBinary,'BFILE': BFILE,'CLOB': CLOB,'NCLOB': NCLOB,'TIME WITH TIME ZONE':TIME,'TIMESTAMP': TIMESTAMP,'TIMESTAMP WITH TIME ZONE': TIMESTAMP,'INTERVAL DAY TO SECOND': INTERVAL,'FLOAT': FLOAT,'DOUBLE PRECISION': DOUBLE_PRECISION,'LONG': LONGVARCHAR,'BIT': BIT,'TEXT': _DMText,#'TEXT': VARCHAR,'INTEGER': _DMInteger,'INT': _DMInteger,'BINARY':DMBINARY
}
安装驱动到python环境
获取到window的文件后,将dm8/drivers/python/sqlalchemy放到python环境中
随便放一个地址
然后执行以下命令
python setup.py install
记住执行前,记得把环境原有的sqlalchemy和sqlalchemy_dm删除
如果还有其他问题,见招拆招即可
dmPython离线安装
这一步骤,仅适用于,dmPython只能离线安装的伙伴
氛围两个步骤
制作dmPython rpm包
需要吧window中 drivers/python/dmPython放到docker中任意位置
因为离线方式暂时不是迫切的(我已经实现了)
而且部署环境也可以访问互联网,故先留下制作镜像和docker服务安装dmPython的随笔 如下
理解如下的命令
有个比较重要的事情,dpi的路径,是dm8 docker服务中的bin目录(整个copy过去就行)
# dm8 docker服务安装python3.10
apt-get install software-properties-common -y
add-apt-repository ppa:deadsnakes/ppa
apt-get install python3.10ls /usr/bin/python3*
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
update-alternatives --config python3
python3 --version#dm8 制作dmPython rpm包
cd /opt/dmdbms
ls
cd /opt/dmdbms/drivers/python/dmPython
apt-get update
apt-get install python3 -y
apt-get install python3.10-distutils -y
export DM_HOME=/opt/dmdbms
apt-get install build-essential -y
apt-get install python3.10-dev -y
apt-get install rpm -ycp /opt/dmdbms/drivers/python/dpi/include/DPI.h /usr/include/python3.10
cp /opt/dmdbms/drivers/python/dpi/include/DPIext.h /usr/include/python3.10
cp /opt/dmdbms/drivers/python/dpi/include/DPItypes.h /usr/include/python3.10python3 setup.py bdist_rpmpython3 setup.py installapt-get install rpm -y#开发服务安装dmPython
cd /usr/local/lib/python3.10/site-packages/dmPythonRpm
apt-get install alien -y
alien dmPython-2.4.8-8.1-py310-1.x86_64.rpm
dpkg -i dmpython_2.4.8-2_amd64.deb
pip uninstall dmPython -y
pip show dmPython
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.10/dist-packages
export LD_LIBRARY_PATH=/opt/dpi:$LD_LIBRARY_PATH
python3 -c "import dmPython; print(dmPython.__file__)"export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dpi/
echo $LD_LIBRARY_PATH
find / -name libdmdpi.sorpm -ivh dmPython-2.4.8-8.1-py310-1.x86_64.rpm --nodepscd /usr/local/lib/python3.10/site-packages/dmPythonRpm
rpm -ivh dmPython-2.4.8-8.1-py310-1.x86_64.rpmapt-get autoremove --purge dmpythonalien dmPython-2.4.8-8.1-py310-1.x86_64.rpm
pip show dmPython
dpkg -i dmpython_2.4.8-2_amd64.deb
pip show dmPython
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.10/dist-packagescp dmPython-2.4.8.egg-info /usr/local/lib/python3.10/site-packages/dmPython-2.4.8.egg-info
cp dmPython.cpython-310-x86_64-linux-gnu.so /usr/local/lib/python3.10/site-packages/dmPython.cpython-310-x86_64-linux-gnu.so#参考资料https://blog.csdn.net/qq_45458674/article/details/134399152
相关文章:
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
问题 标题即为问题, 问题出现原因 sqlalchemy对应的sqlalchemy_dm源码需要调整 版本说明 python 3.10 dmPython 2.5.5(2.4.8也可以) sqlalchemy1.4.52 sqlalchemy_dm1.4.39 环境说明 部署环境 ubuntu20 开发环境window11 wsl2 ubuntu20 可能会出现的…...
运动控制卡网络通讯的心跳检测之C#上位机编程
本文导读 今天,正运动小助手给大家分享一下如何使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能。 01 ECI2618B硬件介绍 ECI2618B经济型多轴运动控制卡是一款脉冲型、模块化的网络型运动控制卡。控制卡本身最多支持6轴,可扩展至12轴的运动控制…...
QT 控件定义为智能指针引发的bug
问题描述: std::unique_ptr<QStackedLayout> m_stacked_layout; 如上为定义; 调用: Line13ABClient::Line13ABClient(QWidget *parent) : BaseWidget(parent) { // 成员变量初始化 m_get_ready false; m_tittle_wnd…...
Scala项目(图书管理系统)
3、service BookService package org.app package serviceimport org.app.dao.{BookDAO, BorrowRecordDAO} import org.app.models.{BookModel, BorrowRecordModel}import java.time.LocalDateTime import scala.collection.mutable.ListBuffer// 图书业务逻辑层 class BookS…...
前端开发 详解 Node. js 都有哪些全局对象?
在 Node.js 中,全局对象(Global Objects)是指在任何模块中都可以直接访问的对象和变量,而不需要显式地进行导入。Node.js 提供了一些全局对象,帮助开发者在编写应用程序时更加方便地进行一些常见操作,如文件…...
2024_12_20_生活记录
年底了,提前祝各位朋友们新年快乐!我将近两年没动笔写blog了,主要确实挺忙。。。今天想简单聊聊自己的近期想法,一方面是职业规划,一方面是生信,最后是个人感悟。 职业规划 熟悉我的朋友们会了解我之前一直…...
Sequelize ORM 现有表如何使用
一、 在mysql中创建一个表 或者随便找一个现有的表 已经有了一张叫做xw_posts的表。表里的字段非常简单,大家可以自己建一下 CREATE TABLE xw_posts (id int unsigned NOT NULL AUTO_INCREMENT,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_…...
ArcGIS Pro 3.4新功能3:空间统计新特性,基于森林和增强分类与回归,过滤空间自相关
目录 应用 1:它是相关性还是托布勒第一定律? 应用 2:将空间带入非空间模型 结论 在 ArcGIS Pro 3.4 中,我们在新的空间组件实用程序(Moran 特征向量)工具集中发布了一个新工具 - 从字段过滤空间自相关。…...
H3C MPLS跨域optionB
实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…...
源码分析之Openlayers中Geometry基类介绍
概述 在上一篇文章源码分析之Openlayers中Geom篇中提到Geometry类是继承于 Openlayers 中的BaseObject类(参考源码分析之Openlayers中核心BaseObject类).而Geometry类通常情况下也是作为一个抽象基类,作为Geom几何图形的基类或父类,不会在应用中去实例化它.Geometry类回去注册…...
《Vue3 三》Vue 中的 options 选项
data 选项: data 选项:属性值必须是一个函数;返回值是一个对象,返回的对象会被 Vue 的响应式系统劫持,之后对该对象的任何访问或者修改都会在劫持中被处理。 在 Vue2.x 中,data 的属性值可以是一个函数&am…...
Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南
一、前言 在国内数字化转型浪潮和 信创 大背景下,“替代进口”成为许多企业级应用所需要面对的重要课题,搜索领域也不例外。 Elasticsearch(简称 ES)作为一款业界领先的全文搜索和分析引擎,虽然功能强大,但…...
Pytorch | 从零构建EfficientNet对CIFAR10进行分类
Pytorch | 从零构建EfficientNet对CIFAR10进行分类 CIFAR10数据集EfficientNet设计理念网络结构性能特点应用领域发展和改进 EfficientNet结构代码详解结构代码代码详解MBConv 类初始化方法前向传播 forward 方法 EfficientNet 类初始化方法前向传播 forward 方法 训练过程和测…...
Python超能力:高级技巧让你的代码飞起来
文章一览 前言一、with1.1 基本用法1.2 示例自定义上下文管理器 二、条件表达式三、列表式推导式与 zip 结合 四、map() 函数(内置函数)map用于数据清洗1. 数据清洗:字母大小写规范2. filter() 函数 五、匿名函数 lambda5.1 lambda的参数&…...
熊军出席ACDU·中国行南京站,详解SQL管理之道
12月21日,2024 ACDU中国行在南京圆满收官,本次活动分为三个篇章——回顾历史、立足当下、展望未来,为线上线下与会观众呈现了一场跨越时空的技术盛宴,吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…...
FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、详细设计方案设计原理框图IMX327 及其配置FPD-Link视频串化-解串方案MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 5、…...
vue3动态绑定图片和使用阿里巴巴矢量图
矢量图 1。加购物车 2. 下载在本地 解压 (把以下文件放进项目文件夹里面) ├── font ├── iconfont.css ├── iconfont.json (font-class用法) ├── iconfont.js (symbol用法) ├─…...
‘vite‘ 不是内部或外部命令,也不是可运行的程序
报错:执行 npm run dev时,提示’vite’ 不是内部或外部命令,也不是可运行的程序 解决:执行 npm install -g vite 报错:导入vite后再次执行npm run dev,报错failed to load config from E:\eclipseWP\test1…...
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
引言 本期介绍了一种基于加权平均位置概念的元启发式优化算法,称为加权平均优化算法Weighted average algorithm,WAA。该成果于2024年12月最新发表在中JCR1区、 中科院1区 SCI期刊 Knowledge-Based Systems。 在WAA算法中,加权平均位置代表当…...
如何获取 ABAP 内表中的重复项
要识别 ABAP 内表中的重复项,可以结合使用排序和循环。下面的示例展示了如何查找内部表中的重复条目: DATA: BEGIN OF itab OCCURS 0,field1 TYPE i,field2 TYPE c LENGTH 10,END OF itab,wa LIKE LINE OF itab.* Add sample data to internal table it…...
Next 26: 一场定义未来的云端与 AI 盛宴,即将开启!
以下文章来源于谷歌云服务,作者 Google Cloud左右滑动查看更多 点击屏末 | 阅读原文 | 直达官网...
Ollama一键部署【书生·浦语】internlm2-chat-1.8b:镜像免配置实操手册
Ollama一键部署【书生浦语】internlm2-chat-1.8b:镜像免配置实操手册 想体验一个轻量又好用的中文对话模型吗?今天给大家介绍一个超级简单的部署方法,让你在几分钟内就能用上【书生浦语】的 internlm2-chat-1.8b 模型。这个模型只有18亿参数…...
如何用Video Speed Controller将视频观看效率提升300%?
如何用Video Speed Controller将视频观看效率提升300%? 【免费下载链接】videospeed HTML5 video speed controller (for Google Chrome) 项目地址: https://gitcode.com/gh_mirrors/vi/videospeed 在信息爆炸的时代,视频内容占据了我们的学习、工…...
robust互斥锁实现原理(futex内核态源码分析)
由于OOM,avm一直被内核kill -9杀掉。最终会出现avm重启报错 bos_em_service: Fatal glibc error: pthread_mutex_lock.c:450 (__pthread_mutex_lock_full): assertion failed: e ! ESRCH || !robust。这个锁是共享内存上的一个robust互斥锁。 而且该BUG报了好几例。…...
当你的 Agent 会“多轮思考”,Trace 却还停留在单轮:阿里云 CMS OpenClaw 可观测插件升级
作者:王方(方羞) openclaw-cms-plugin 是阿里云云监控 CMS 自研的 OpenClaw 可观测插件,它实现了对 OpenClaw 每次任务调用的链路追踪,符合 GenAI 语义规范,方便用户快速定位和排查问题。具体可参考&#…...
Python 环境构建艺术:虚拟环境、包管理与开发工具链
# 002、环境构建艺术:虚拟环境、包管理与开发工具链上周帮同事调试一个老项目,问题出得挺典型:本地跑得好好的脚本,放到服务器上就报依赖冲突。日志里赫然一行“numpy版本不匹配导致内存布局错误”,两个人对着屏幕查了…...
Clawdbot企业集成:飞书机器人深度定制开发
Clawdbot企业集成:飞书机器人深度定制开发 企业级AI助手如何无缝融入日常工作流?飞书机器人正成为智能办公的新入口 在现代企业环境中,AI助手与办公平台的深度集成已经成为提升效率的关键。Clawdbot作为企业级AI助手平台,与飞书的…...
Qwen3语义雷达:开箱即用的智能搜索工具,效果实测分享
Qwen3语义雷达:开箱即用的智能搜索工具,效果实测分享 1. 项目概览:告别关键词搜索的新体验 在信息爆炸的时代,传统的关键词搜索已经无法满足我们对精准信息获取的需求。想象一下,当你想查找"如何缓解工作压力&q…...
OpenClaw数据整理术:千问3.5-9B自动化清洗Excel数据
OpenClaw数据整理术:千问3.5-9B自动化清洗Excel数据 1. 为什么需要AI驱动的数据清洗 每次面对杂乱无章的Excel表格时,我都忍不住想起上个月那个加班的深夜。市场部发来的客户名单里,同一家公司的联系人分散在十几行,电话号码格式…...
Java安全编程与静态分析实战
由于当前年份尚未到达2026年,且未明确具体代码功能需求,以下提供一份通用的Java代码质量与静态分析实战示例,涵盖常见代码规范、静态分析工具集成和单元测试实践。假设需求为“实现一个安全的字符串处理工具类并集成静态分析”:代…...
