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

这篇具有很好参考价值的文章主要介绍了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'

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

解决方法:将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'?

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

###你也可以在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'?

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

错误二-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'?

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

修改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)

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

老版本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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

错误六:Invalid column name [AAAAAAAAAAAAAAAAAC]

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

解决方法:修改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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython

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

arm架构,django4.2.7适配达梦8数据库,数据库,python,python,django,达梦,dmPython,django_dmPython文章来源地址https://www.toymoban.com/news/detail-861609.html

到了这里,关于arm架构,django4.2.7适配达梦8数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云PolarDB数据库倚天ARM架构详细介绍

    阿里云云原生数据库PolarDB MySQL版推出倚天ARM架构,倚天ARM架构规格相比X86架构规格最高降价45%,PolarDB针对自研倚天芯片,从芯片到数据库内核全链路优化,助力企业降本增效。基于阿里云自研的倚天服务器,同时在数据库引擎层、OS层、芯片层进行了全路径优化,最高降价

    2024年02月12日
    浏览(31)
  • 阿里云数据库PolarDB MySQL版倚天ARM架构详解

    阿里云云原生数据库PolarDB MySQL版推出倚天ARM架构,倚天ARM架构规格相比X86架构规格最高降价45%,PolarDB针对自研倚天芯片,从芯片到数据库内核全链路优化,助力企业降本增效。基于阿里云自研的倚天服务器,同时在数据库引擎层、OS层、芯片层进行了全路径优化,最高降价

    2024年02月10日
    浏览(33)
  • 超详细的ARM架构适配介绍!

    超详细的ARM架构适配介绍! - 掘金 本文主要介绍云联壹云平台如何适配ARM,并运行在ARM CPU架构的机器上。 背景介绍 1、平台服务运行架构 云联壹云平台采用容器化,分布式的架构运行在 Kubernetes(K8s)之上。下面是平台服务运行的架构图: 在多个节点之上,我们会构建Kub

    2024年02月09日
    浏览(19)
  • ARM CPU架构下Mysql数据库通过Sysbench压力测试

    写到最前        这段本想写到最后的,但是哥们为了多点粉丝把这个文章设置成了粉丝可见,所以在最前面这段我想谈一下我本人对当前国产信创要求以及ARM架构服务器的看法。         总的来说我对国产信创ARM服务器这条技术路线持绝对乐观的态度。首先从服务器CPU算力

    2024年02月03日
    浏览(36)
  • 【Django】Django4.1.2使用xadmin避坑指南

    换成Django4版本使用xadmin真是需要巨大勇气。 win10 python3.9.0 django4.1.2 解决办法: 如果正常安装了xadmin库的话,six库也会安装,把 项目根目录/venv/Lib/site-packages/six.py 复制到 项目根目录/venv/Lib/site-packages/django/utils 下即可。 分析: Django已经弃用 ugettext(), ugettext_lazy(), ugettext_noo

    2023年04月08日
    浏览(24)
  • <达梦>《达梦数据库备份归档》

    方式 备份 DIsql 工具 用于执行联机的数据备份与数据还原,包括数据库备份、归档备份、表空间备份与还原、表备份与还原; DMRMAN 工具 用于执行脱机的数据备份、还原与恢复,包括脱机的数据库备份、还原与恢复,脱机还原表空间,归档的备份、还原与修复; 客户端工具

    2024年02月05日
    浏览(53)
  • 【KingbaseES】银河麒麟V10 ARM64架构_安装人大金仓数据库KingbaseES_V8R6(CentOS8)

    🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥 🪁🍁🪁🍁🪁🍁🪁🍁 🪁🍁🪁🍁🪁🍁🪁 🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步

    2024年02月08日
    浏览(34)
  • 遥遥领先,免费开源的django4-vue3前后端分离项目

    本项目前端基于当下流行且常用的vue3作为主要技术栈进行开发,融合了typescript和element-plus-ui,提供暗黑模式和白昼模式两种主题以及全屏切换,开发bug少,简单易学,项目后端采用了python的django框架作为开发模块。 目前正在搭建到网络服务器中。项目会不定期更新喜欢的朋

    2024年02月04日
    浏览(35)
  • 达梦数据库 优化

    优化不能仅从数据库方面考虑,比如,在存储达到数据库极限、应用涉及人员设计的代码稀巴烂的情况下,进行调优就是杯水车薪的效果。 涉及到优化人员: 数据库管理员 应用程序架构师 应用程序设计人员 系统管理员 存储管理员 涉及到的优化内容: 应用程序:(与开发人员

    2024年04月09日
    浏览(32)
  • Oracle、达梦:☆获取数据库对象、获取对象的DDL定义语句(达梦)

    以下方式在达梦DM数据库中都能跑通,Oracle未测试所有的方式。 数据库所有对象表:包括 表、视图、物化视图、函数、存储过程……等 ①、ALL_OBJECTS视图方式 OBJECT_TYPE 解释: oracle 的ALL_OBJECTS中的OBJECT_TYPE表示: TABLE :表示表,这是用于存储和管理数据库中数据的主要结构。

    2024年02月03日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包