【问题标题】:invalid literal for int() with base 10: '...aa53' - Django基数为 10 的 int() 的无效文字:'...aa53' - Django
【发布时间】:2017-11-06 22:29:01
【问题描述】:

我有一个 django 项目,我正在尝试从 json 响应中将某些内容保存到我的数据库中。表中的字段是字符字段。返回的响应是一个字符串。我想通过创建一个新的数据库对象来简单地将响应保存在数据库中。我收到以下错误,我不确定为什么会这样。

invalid literal for int() with base 10: '5..6003463aa53'

这是我的代码:

for node in nodes:
node_json = node.json
node_id = node_json['_id']
print(node_id)
node_name = node_json['info']['nickname']
print(node_name)
node_class = node_json['info']['class']
print(node_class)
node_bank_name = node_json['info']['bank_name']
final_bank_name = str(node_bank_name)
print(node_bank_name)
new_account = SynapseAccounts.objects.create(
     user = currentUser,
     name = node_name,
     account_id = node_id,
     account_class = node_class,
     bank_name = final_bank_name,
)
print(new_account)

我什至强制了字符串。

这是我为桌子准备的模型:

class SynapseAccounts(models.Model):
     user = models.ForeignKey(User, on_delete=models.CASCADE)
     name = models.CharField(max_length=100, default='Bank Account')
     account_id = models.IntegerField(default=0)
     account_class = models.CharField(max_length=50, default='Checking')
     bank_name = models.CharField(max_length=150, default='DefaultBank')
     create = models.DateTimeField(auto_now_add=True)

这是完整的堆栈跟踪

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/omarjandali/Desktop/yap/opentab/tab/views.py", line 1859, in saveLinkedAccounts
    bank_name = final_bank_name,
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/query.py", line 394, in create
    obj.save(force_insert=True, using=self.db)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py", line 807, in save
    force_update=force_update, update_fields=update_fields)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py", line 837, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py", line 923, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/base.py", line 962, in _do_insert
    using=using, raw=raw)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/query.py", line 1076, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1106, in execute_sql
    for sql, params in self.as_sql():
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in as_sql
    for obj in self.query.objs
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in <listcomp>
    for obj in self.query.objs
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1058, in <listcomp>
    [self.prepare_value(field, self.pre_save_val(field, obj)) for field in fields]
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 998, in prepare_value
    value = field.get_db_prep_save(value, connection=self.connection)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 770, in get_db_prep_save
    prepared=False)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 762, in get_db_prep_value
    value = self.get_prep_value(value)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 1853, in get_prep_value
    return int(value)
ValueError: invalid literal for int() with base 10: '5a00e02cf9bd86003463aa53'

【问题讨论】:

  • 请修正缩进,并添加完整的堆栈跟踪。
  • 你可以看上面@scharette
  • JSON 中的 ID 显然是十六进制格式。您可能需要将它们显式转换为整数:account_id = int(node_id, 16)

标签: python json django


【解决方案1】:

在我看来,您的 account_id 字段 (account_id = models.IntegerField(default=0)) 正在接收不是整数的数据。

你确定node_json['_id'] 返回一个整数吗?因为您使用该值来设置 node_id,然后在创建 account_id 字段时使用该值。

注意:5a00e02cf9bd86003463aa53 看起来像 id,但不是整数。

【讨论】:

  • 好的,所以它是 id 而不是银行名称。我明白了,这是有道理的。谢谢@dethos
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2023-03-09
  • 1970-01-01
  • 2011-07-17
  • 2012-07-08
相关资源
最近更新 更多