arm架构,django4.2.7适配达梦8数据库

【Python相关包版本信息】

Django                        4.2.7
django-dmPython               3.1.7
dmPython                      2.5.5

【达梦数据库版本】

DM Database Server 64 V8
DB Version: 0x7000c

适配过程中发现的问题如下:

错误一:django.core.exceptions.ImproperlyConfigured: 'django_dmPython' isn't an available database backend or couldn't be imported. Check the above exception. To use one of the built-in backends, use 'django.db.backends.XXX', where XXX is one of: 'mysql', 'oracle', 'postgresql', 'sqlite3'

解决方法:将django_dmPython和django_dmPython-3.1.7.dist-info复制一份,放到django下面的db/backends/目录下,因此后面发现与此包相关的问题,需要修改2处。

错误二-1:ImportError: cannot import name 'force_text' from 'django.utils.encoding' (/usr/local/python/lib/python3.12/site-packages/django/utils/encoding.py). Did you mean: 'force_bytes'?

修改django/db/backends/django_dmPython/base.py,将18行中的force_text去掉,因为在代码中没有被调用。

###你也可以在django/utils/encoding.py文件中添加此函数,这样修改后,就可以忽略错误二-2、错误二-3。

老版本django中的force_text函数的定义如下:

def force_text(s, encoding='utf-8', strings_only=False, errors='strict'):

    warnings.warn(

        'force_text() is deprecated in favor of force_str().',

        RemovedInDjango40Warning, stacklevel=2,

    )

    return force_str(s, encoding, strings_only, errors)

错误二-2:ImportError: cannot import name 'force_text' from 'django.utils.encoding' (/usr/local/python/lib/python3.12/site-packages/django/utils/encoding.py). Did you mean: 'force_bytes'?

修改django/db/backends/django_dmPython/operations.py文件,将前面的import导入的force_text去掉,同时将下面的调用修改为force_str(2处)。

错误二-3:ImportError: cannot import name 'force_text' from 'django.utils.encoding' (/usr/local/python/lib/python3.12/site-packages/django/utils/encoding.py). Did you mean: 'force_bytes'?

修改django/db/backends/django_dmPython/utils.py文件,将前面的import导入的force_text去掉,同时将下面的调用修改为force_str(1处)

错误三、ImportError: cannot import name 'Random' from 'django.db.models.expressions' (/usr/local/python/lib/python3.12/site-packages/django/db/models/expressions.py)

老版本django中的Random类的定义如下:

class Random(Expression):

    output_field = fields.FloatField()

    def __repr__(self):

        return "Random()"

    def as_sql(self, compiler, connection):

        return connection.ops.random_function_sql(), []

修改方法:修改django/db/models/expressions.py文件,在代码最后面,增加上述定义。(不要尝试将其加入到django_dmPython/compiler.py,因为上面这个类又调用了Expression,比较麻烦。

错误四:django.core.exceptions.FullResultSet

解决方法:修改django/db/models/sql/where.py,将175和176行注释掉(这样修改肯定不对,不过目前暂未发现影响,后期发现了再改)

错误五:AttributeError: 'Query' object has no attribute 'explain_query'

解决方法:修改django_dmPython/compiler.py,将300-304行注释掉(这样修改肯定不对,不过目前暂未发现影响,后期发现了再改,不过应该影响不大,这个应该是生成explain查询sql语句性能的动作)

老版本/django/db/models/sql/query.py代码中定义了explain_query变量,在Query类中的__init__函数中定义此变量,赋默认值为False;在函数explain中将其值修改为了explain了。

错误六:Invalid column name [AAAAAAAAAAAAAAAAAC]

这个问题是达梦驱动的问题,直接按照下面修改就行。

解决方法:修改django_dmPython/operations.py中的last_insert_id函数,参考如下写法。

def last_insert_id(self, cursor, table_name, pk_name):

        """

        Given a cursor object that has just performed an INSERT statement into

        a table that has an auto-incrementing ID, returns the newly created ID.

        This method also receives the table name and the name of the primary-key

        column.

        """

        # sq_name = self._get_sequence_name(table_name)

        # cursor.execute('SELECT "%s".currval FROM dual' % sq_name)

        if cursor.lastrowid is not None:

            lastrowid=cursor.lastrowid

            rowid_dict = {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9,

                                  'K': 10, 'L': 11,

                                  'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, 'R': 17, 'S': 18, 'T': 19, 'U': 20,

                                  'V': 21, 'W': 22,

                                  'X': 23, 'Y': 24, 'Z': 25, 'a': 26, 'b': 27, 'c': 28, 'd': 29, 'e': 30, 'f': 31,

                                  'g': 32, 'h': 33,

                                  'i': 34, 'j': 35, 'k': 36, 'l': 37, 'm': 38, 'n': 39, 'o': 40, 'p': 41, 'q': 42,

                                  'r': 43, 's': 44,

                                  't': 45, 'u': 46, 'v': 47, 'w': 48, 'x': 49, 'y': 50, 'z': 51, '0': 52, '1': 53,

                                  '2': 54, '3': 55,

                                  '4': 56, '5': 57, '6': 58, '7': 59, '8': 60, '9': 61, '+': 62, '/': 63}

            rowid_temp = 0

            for i in lastrowid[-8:]:

                rowid_temp = rowid_temp * 64 + rowid_dict[i]

            lastrowid=rowid_temp

            query = 'select %s from %s where rowid = %s' %(self.quote_name(pk_name), self.quote_name(table_name), lastrowid)

            cursor.execute(query)

        else:

            cursor.execute('SELECT MAX(%s) from %s' %(self.quote_name(pk_name), self.quote_name(table_name)))

           

        value = cursor.fetchone()[0]

        return value

错误七、TypeError: DatabaseSchemaEditor._alter_column_type_sql() takes 5 positional arguments but 7 were given

上图是新老版本的_alter_column_type_sql的函数定义,发现多了2个参数,分别是old_collation, new_collation。这2个参数在函数体内调用如下:

可以很容易定位到_collate_sql函数,后面2个参数压根未使用,只是使用了collation,也就是new_collation参数,这个函数的作用是字符集排序;

查看django_dmPython/schema.py中的_alter_column_type_sql函数,在参数中添加2个参数,这2个参数暂时先不用,后面有问题再处理(可以参考django/db/backends/postgresql/schema.py或django/db/backends/mysql/schema.py中同名函数的实现逻辑)。

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

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

相关文章

解决IDEA调试方法进不去与数据看不到的问题

问题场景: 最近使用IDEA调试的时候,发现JDK有些方法**步进(F7)**无法进入,有些类的字段值也看不到。 原因分析: 提示:IDEA为了提升调试效率,以及突出调试数据的显示效果,会默认帮我们做一些筛选…

PAT——1007素数对猜想(C++)

问题描述&#xff1a; 让我们定义为&#xff1a;​&#xff0c;其中​是第i个素数。显然有d1​1&#xff0c;且对于n>1有​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数 N (<10^5)&#xff0c;请计算不超过 N 的满足猜想的素数对的个…

# 从浅入深 学习 SpringCloud 微服务架构(四)Ribbon

从浅入深 学习 SpringCloud 微服务架构&#xff08;四&#xff09;Ribbon 段子手168 一、ribbon 概述以及基于 ribbon 的远程调用。 1、ribbon 概述&#xff1a; Ribbon 是 Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。 在 SpringCloud 中 Eureka …

Flutter 插件站新升级: 加入优秀 GitHub 开源项目

Flutter 插件站新升级: 加入优秀 GitHub 开源项目 视频 https://youtu.be/qa49W6FaDGs https://www.bilibili.com/video/BV1L1421o7fV/ 前言 原文 https://ducafecat.com/blog/flutter-awesome-github-repo-download 这几天晚上抽空把 Flutter 插件站升级&#xff0c;现在支…

qt实现不定数量的按钮向前向后移动展示

按钮模拟移动 引言示例代码第一种思路开发环境代码结构实现代码第二种思路开发环境实现代码第三种思路开发环境实现代码总结引言 此文主要记录用qt实现按钮的移动,具体效果如下: 模拟按钮移动效果 示例代码 本文记录了三种实现方式。 第一种 思路 用动态数组vector存放创…

【python项目推荐】键盘监控--统计打字频率

原文&#xff1a;https://greptime.com/blogs/2024-03-19-keyboard-monitoring 代码&#xff1a;https://github.com/GreptimeTeam/demo-scene/tree/main/keyboard-monitor 项目简介 该项目实现了打字频率统计及可视化功能。 主要使用的库 pynput&#xff1a;允许您控制和监…

【多线程】synchronized原理 | 锁升级| 锁消除 | 锁粗化 | 信号量 | CountDownLatch

文章目录 一、synchronized原理synchronized属于哪种锁&#xff1f; 1.锁升级偏向锁&#xff1a; 2.锁消除3.锁粗化锁的粒度 二、信号量 Semaphore三、CountDownLatch1.await方法2.countDown方法 一、synchronized原理 synchronized属于哪种锁&#xff1f; ​ 在初始情况下&am…

【oceanbase】安装ocp,ocp部署oceanbase

https://www.oceanbase.com/docs/common-ocp-1000000000584989 资源 iphostnamecpumem组件192.168.0.71obnode-000-071816oceanbase-ce192.168.0.72obnode-000-072816oceanbase-ce192.168.0.73obnode-000-073816oceanbase-ce192.168.0.74obproxy-000-07424obproxy-ce192.168.0…

【Java EE】网络初识

目录 1.网络发展史 2.局域网LAN 2.1组建方式 2.1.1基于网线直连 2.1.2基于集线器组建 2.1.3基于交换机组建 2.1.4基于交换机和路由器组建 3.广域网WAN 4.网络通信基础 4.1 IP地址 4.1.1概念 4.1.2格式 4.1.3端口号 4.1.3.1概念 4.1.3.2格式 4.2认识协议 4.2.1概…

Qt 跨平台开发的一丢丢总结

Qt 跨平台开发 文章目录 Qt 跨平台开发摘要第一 \ & /第二 神奇{不能换行显示第三 预处理宏 关键字&#xff1a; Qt、 win、 linux、 lib、 MSVC 摘要 最近一直在琢磨Qt跨平台开发的问题&#xff0c;缘由有以下几个&#xff0c; 首先第一个&#xff0c;我们目前开发…

医院敏感文件交互 如何保障安全和效率?

医院会产生大量的敏感文件&#xff0c;这些敏感文件交互时&#xff0c;都需要使用特殊的手段&#xff0c;来保障数据的安全性。 医院的敏感数据主要包括以下几类&#xff1a; 1、患者基本信息&#xff1a;包括患者的姓名、身份证号码、户籍地或现住址、联系方式、文化程度、既…

【数据结构】二叉树链式结构的实现《遍历,实现》(题库+解析+源码)

前言 二叉树的学习离不开对堆的理解&#xff0c;这是上篇堆的传送门 http://t.csdnimg.cn/F6Jp3 1.二叉树链式结构的实现 1.1 前置说明 在学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在大家对二 叉树结构掌握还…

【LLM】向量知识库

文章目录 认识向量知识库向量Embeddings向量数据库向量数据库的作用向量数据库与传统数据库的区别 Embedding API使用公有Embedding API自定义一个Embeedding API 常见文本数据的预处理搭建并使用向量数据库思考向量数据库在LLM中的价值体现向量的妙用&#xff0c;可行&#xf…

gcc,软硬链接和制作动静态库

gcc的操作 预处理 gcc -E file.c -o file.i -E选项表示预处理完就停下来&#xff0c;在编译时-o file.i可以省略&#xff0c;编译器会默认生成同名的.i文件 编译 gcc -S file.i -o file.s -s表示生成完汇编码就停下来&#xff0c;在编译时-o file.s可以省略&#xff0c;编…

kaggle电子邮件分类xgboost建模可视化模型评估混淆矩阵范例

目录 概述 依赖环境 代码解读 库的导入 数据读取 扇形图可视化统计 词云图可视化 分布条形图可视化 数据预处理 划分数据集 模型训练 模型预测和评估 ROC曲线评估 混淆矩阵评估 多维度交叉评估 配套源码和数据集 xgboost邮件分类配套数据集和源码下载地址 概述…

DenseDiffusion:Dense Text-to-Image Generation with Attention Modulation

1 研究目的 该文献的研究目的主要是&#xff1a; 探讨一种更为广泛的调制方法&#xff0c;通过设计多个正则化项来优化图像合成过程中的空间控制。论文的大致思想是&#xff0c;在现有的基于数据驱动的图像合成系统基础上&#xff0c;通过引入更复杂的调制策略&#xff0c;实现…

pip下载包opencv出错(报错failed building wheel for opencv-python解决方法)

文章目录 1 报错2 原因3 解决方法参考 1 报错 ERROR: Could not build wheels for opencv-python, which is required to install pypr2 原因 版本不兼容的问题,当使用pip install opencv-python命令安装的是最新版本&#xff0c;当前python版本不支持。需要安装当前版本pyth…

认识产品经理

一、合格的产品经理 1、什么是产品 解决某个问题的东西&#xff0c;称为产品 键盘可以打字&#xff0c;想喝水了可以用水壶&#xff0c;在超市想找一款扫把会有导购员服务 产品有颜色、大小等等区别&#xff0c;也有有形和无形的区别 2、什么是产品经理 想清楚怎么设计产品…

Leetcode - 周赛394

目录 一&#xff0c;3120. 统计特殊字母的数量 I 二&#xff0c;3121. 统计特殊字母的数量 II 三&#xff0c;3122. 使矩阵满足条件的最少操作次数 四&#xff0c;3123. 最短路径中的边 一&#xff0c;3120. 统计特殊字母的数量 I 本题就是统计有多少个字母的大小写同时出现…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…