首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块django.db.backends.utils没有属性“typecast_decimal”

模块django.db.backends.utils没有属性“typecast_decimal”
EN

Stack Overflow用户
提问于 2022-01-14 09:48:25
回答 2查看 244关注 0票数 0

当我跑的时候

python manage.py inspectdb --database=sybase_database

它以错误消息结尾:

Database.register_converter(Database.DT_DECIMAL, util.typecast_decimal) AttributeError: module 'django.db.backends.utils' has no attribute 'typecast_decimal'

代码语言:javascript
复制
$ pip freeze
certifi==2021.10.8
chardet==3.0.4
defusedxml==0.7.1
Django==2.2.4
django-allauth==0.40.0
django-bootstrap-form==3.4
django-bootstrap3==15.0.0
django-crispy-forms==1.7.2
django-crudbuilder==0.2.7
django-debug-toolbar==1.10.1
django-filter==2.2.0
django-mssql-backend==2.8.1
django-tables2==2.4.1
idna==2.8
importlib-metadata==2.1.1
oauthlib==3.1.1
pyodbc==4.0.32
python-dateutil==2.8.2
python3-openid==3.2.0
pytz==2021.3
requests==2.21.0
requests-oauthlib==1.3.0
six==1.16.0
sqlany-django==1.13
sqlanydb==1.0.11
sqlparse==0.4.2
urllib3==1.24.3
zipp==3.6.0

Ubuntu 18.04

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-18 14:10:35

sqlany-django只支持Django 1.8.5 (Django 1.7.0用于inspectdb命令)。

它已不再维持;最近一次更新是在2016年5月。

您可以在manage.py或AppConfig中为Django的更高版本进行修补。

代码语言:javascript
复制
# Django >= 2.0, for sqlany_django/base.py
import decimal
from django.db.backends import utils
utils.typecast_decimal = decimal.Decimal

# Django >= 1.11, for BaseDatabaseWrapper
from sqlany_django.base import DatabaseWrapper
DatabaseWrapper.client_class = lambda self, connection: None
DatabaseWrapper.creation_class = lambda self, connection: None
DatabaseWrapper.features_class = lambda self, connection: None
DatabaseWrapper.introspection_class = lambda self, connection: None
DatabaseWrapper.ops_class = lambda self, connection: None

# Django >= 1.7.1, for inspectdb
from django.db.backends import utils
from sqlany_django import base
class CursorWrapper(base.CursorWrapper, utils.CursorWrapper):
    pass
base.CursorWrapper = CursorWrapper

参考文献:

堆栈跟踪:

关于DatabaseWrapper

代码语言:javascript
复制
Traceback (most recent call last):
  ...
  File "/path/to/site-packages/django/core/management/commands/inspectdb.py", line 40, in handle_inspection
    connection = connections[options['database']]
  File "/path/to/site-packages/django/db/utils.py", line 207, in __getitem__
    conn = backend.DatabaseWrapper(db, alias)
  File "/path/to/site-packages/sqlany_django/base.py", line 447, in __init__
    super(DatabaseWrapper, self).__init__(*args, **kwargs)
  File "/path/to/site-packages/django/db/backends/base/base.py", line 102, in __init__
    self.client = self.client_class(self)
TypeError: 'NoneType' object is not callable

关于CursorWrapper

代码语言:javascript
复制
Traceback (most recent call last):
  ...
  File "/path/to/site-packages/django/core/management/commands/inspectdb.py", line 47, in handle_inspection
    with connection.cursor() as cursor:
AttributeError: __enter__
票数 1
EN

Stack Overflow用户

发布于 2022-01-14 10:26:11

将typecast_decimal()替换为decimal.Decimal()

将base.py代码更改为

代码语言:javascript
复制
Database.register_converter("decimal", decoder(decimal.Decimal))

在utils.py中,您可以返回

decimal.Decimal()

也许对你有帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70708712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档