Python ValueError:以10为基数的int()的文本无效:';262400000';
我正在开发一个Django应用程序,它从API获取JSON数据并将其存储在PostgreSQL数据库中。但在迁移应用程序时,我遇到以下错误:Python ValueError:以10为基数的int()的文本无效:';262400000';,python,django,python-3.x,postgresql,django-models,Python,Django,Python 3.x,Postgresql,Django Models,我正在开发一个Django应用程序,它从API获取JSON数据并将其存储在PostgreSQL数据库中。但在迁移应用程序时,我遇到以下错误: ValueError: invalid literal for int() with base 10: '262,400,000' 以下是回溯: Traceback (most recent call last): File "manage.py", line 22, in <module> execute_from_comman
ValueError: invalid literal for int() with base 10: '262,400,000'
以下是回溯:
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/python/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/python/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/python/lib/python3.6/site-packages/django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/app/aggregator/WorldBank/management/commands/fetch_wb.py", line 60, in handle
Projects.objects.create(**pdata)
File "/python/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/python/lib/python3.6/site-packages/django/db/models/query.py", line 394, in create
obj.save(force_insert=True, using=self.db)
File "/python/lib/python3.6/site-packages/django/db/models/base.py", line 807, in save
force_update=force_update, update_fields=update_fields)
File "/python/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 "/python/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 "/python/lib/python3.6/site-packages/django/db/models/base.py", line 962, in _do_insert
using=using, raw=raw)
File "/python/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/python/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 "/python/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1106, in execute_sql
for sql, params in self.as_sql():
File "/python/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in as_sql
for obj in self.query.objs
File "/python/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1059, in <listcomp>
for obj in self.query.objs
File "/python/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 "/python/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 "/python/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 770, in get_db_prep_save
prepared=False)
File "/python/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 "/python/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: '262,400,000'
下面是fetch.py文件的代码,该文件存储在/management/commands/fetch.py下:
import requests
from django.core.management.base import BaseCommand
from aggregator.WorldBank.models import Projects
class Command(BaseCommand):
def handle(self, **options):
response = requests.get("https://search.worldbank.org/api/v2/projects?format=json&countryshortname_exact=India&source=IBRD&kw=N&rows=776")
data = response.json()
projects = data.get('projects')
for pdata in projects.values():
pdata['project_id'] = pdata.pop('id', None)
pdata['countryshortname'] = pdata.pop('countryshortname', None)
pdata['projectfinancialtype'] = pdata.pop('projectfinancialtype',None)
pdata['regionname'] = pdata.pop('regionname',None)
pdata['prodline'] = pdata.pop('prodline',None)
pdata['lendinginstr'] = pdata.pop('lendinginstr',None)
pdata['lendinginstrtype'] = pdata.pop('lendinginstrtype',None)
pdata['envassesmentcategorycode']=pdata.pop('envassesmentcategorycode',None)
pdata['supplementprojectflg']=pdata.pop('supplementprojectflg',None)
pdata['productlinetype']=pdata.pop('productlinetype',None)
pdata['projectstatusdisplay']=pdata.pop('projectstatusdisplay',None)
pdata['status']=pdata.pop('status',None)
pdata['project_name']=pdata.pop('project_name',None)
pdata['board_approval_month']=pdata.pop('board_approval_month',None)
pdata['approvalfy']=pdata.pop('approvalfy',None)
pdata['boardapprovaldate']=pdata.pop('boardapprovaldate',None)
pdata['closingdate']=pdata.pop('closingdate',None)
pdata['lendprojectcost']=pdata.pop('lendprojectcost',None)
pdata['ibrdcommamt']=pdata.pop('ibrdcommamt',None)
pdata['idacommamt']=pdata.pop('idacommamt',None)
pdata['totalamt']=pdata.pop('totalamt',None)
pdata['grantamt']=pdata.pop('grantamt',None)
pdata['teamleaderupi']=pdata.pop('teamleaderupi',None)
pdata['prodlinetext']=pdata.pop('prodlinetext',None)
pdata['project_abstract']=pdata.pop('project_abstract',None)
pdata['p2a_flag']=pdata.pop('p2a_flag',None)
pdata['p2a_updated_date']=pdata.pop('p2a_updated_date',None)
pdata['country_namecode']=pdata.pop('country_namecode',None)
pdata['projectinfo']=pdata.pop('projectinfo',None)
pdata['sector1']=pdata.pop('sector1',None)
pdata['theme1']=pdata.pop('theme1',None)
pdata['theme2']=pdata.pop('theme2',None)
pdata['theme3']=pdata.pop('theme3',None)
pdata['url']=pdata.pop('url',None)
pdata['totalcommamt']=pdata.pop('totalcommamt',None)
pdata['mjthemecode']=pdata.pop('mjthemecode',None)
pdata['theme_namecode']=pdata.pop('theme_namecode',None)
pdata['themecode']=pdata.pop('themecode',None)
pdata['countrycode']=pdata.pop('countrycode',None)
pdata['countryname']=pdata.pop('countryname',None)
pdata['docty']=pdata.pop('docty',None)
pdata['mjtheme_namecode']=pdata.pop('mjtheme_namecode',None)
pdata['source']=pdata.pop('source',None)
pdata['projectdocs']=pdata.pop('projectdocs',None)
pdata['mjtheme']=pdata.pop('mjtheme',None)
pdata['locations']=pdata.pop('locations',None)
pdata['facets']=pdata.pop('facets',None)
# other columns need to be ranamed
Projects.objects.create(**pdata)
这是我希望将JSON响应存储到postgres数据库中的API URL:将逗号替换为
。
(python 3支持下划线):
稍后再更改。如果您将所有“金额”的db表数据类型更改为,那么您应该能够通过python将这些字段作为字符串插入,并保留逗号 俗话说,“如果你有一把又大又漂亮的锤子……” 因此,我使用sql函数将导入到数据库表中,然后这只是访问数据的方法之一: 上面有一些关于这个钉子的有用链接:)
实际上,Python不支持整数值中的数千个分隔符。首先删除这些逗号。我无法删除这些逗号,因为我正在将API中的数据存储到数据库中。是否有任何可选的Django字段,以便我也可以存储这些逗号?我使用了IntegerField()…谢谢。我不明白为什么不能将数据存储为逗号整数。如果您从未打算将该值用作整数,请将其存储为字符串。然后使用预处理该值?或将其存储为字符串,因为它不是当前的有效整数。感谢您接受此答案。好奇:您将使用python还是深入研究SQL函数非常感谢您回答这个问题并解释dbfiddle:)为了回答您的问题,我将使用python..但不是我的选择。。我在做别人的项目
import requests
from django.core.management.base import BaseCommand
from aggregator.WorldBank.models import Projects
class Command(BaseCommand):
def handle(self, **options):
response = requests.get("https://search.worldbank.org/api/v2/projects?format=json&countryshortname_exact=India&source=IBRD&kw=N&rows=776")
data = response.json()
projects = data.get('projects')
for pdata in projects.values():
pdata['project_id'] = pdata.pop('id', None)
pdata['countryshortname'] = pdata.pop('countryshortname', None)
pdata['projectfinancialtype'] = pdata.pop('projectfinancialtype',None)
pdata['regionname'] = pdata.pop('regionname',None)
pdata['prodline'] = pdata.pop('prodline',None)
pdata['lendinginstr'] = pdata.pop('lendinginstr',None)
pdata['lendinginstrtype'] = pdata.pop('lendinginstrtype',None)
pdata['envassesmentcategorycode']=pdata.pop('envassesmentcategorycode',None)
pdata['supplementprojectflg']=pdata.pop('supplementprojectflg',None)
pdata['productlinetype']=pdata.pop('productlinetype',None)
pdata['projectstatusdisplay']=pdata.pop('projectstatusdisplay',None)
pdata['status']=pdata.pop('status',None)
pdata['project_name']=pdata.pop('project_name',None)
pdata['board_approval_month']=pdata.pop('board_approval_month',None)
pdata['approvalfy']=pdata.pop('approvalfy',None)
pdata['boardapprovaldate']=pdata.pop('boardapprovaldate',None)
pdata['closingdate']=pdata.pop('closingdate',None)
pdata['lendprojectcost']=pdata.pop('lendprojectcost',None)
pdata['ibrdcommamt']=pdata.pop('ibrdcommamt',None)
pdata['idacommamt']=pdata.pop('idacommamt',None)
pdata['totalamt']=pdata.pop('totalamt',None)
pdata['grantamt']=pdata.pop('grantamt',None)
pdata['teamleaderupi']=pdata.pop('teamleaderupi',None)
pdata['prodlinetext']=pdata.pop('prodlinetext',None)
pdata['project_abstract']=pdata.pop('project_abstract',None)
pdata['p2a_flag']=pdata.pop('p2a_flag',None)
pdata['p2a_updated_date']=pdata.pop('p2a_updated_date',None)
pdata['country_namecode']=pdata.pop('country_namecode',None)
pdata['projectinfo']=pdata.pop('projectinfo',None)
pdata['sector1']=pdata.pop('sector1',None)
pdata['theme1']=pdata.pop('theme1',None)
pdata['theme2']=pdata.pop('theme2',None)
pdata['theme3']=pdata.pop('theme3',None)
pdata['url']=pdata.pop('url',None)
pdata['totalcommamt']=pdata.pop('totalcommamt',None)
pdata['mjthemecode']=pdata.pop('mjthemecode',None)
pdata['theme_namecode']=pdata.pop('theme_namecode',None)
pdata['themecode']=pdata.pop('themecode',None)
pdata['countrycode']=pdata.pop('countrycode',None)
pdata['countryname']=pdata.pop('countryname',None)
pdata['docty']=pdata.pop('docty',None)
pdata['mjtheme_namecode']=pdata.pop('mjtheme_namecode',None)
pdata['source']=pdata.pop('source',None)
pdata['projectdocs']=pdata.pop('projectdocs',None)
pdata['mjtheme']=pdata.pop('mjtheme',None)
pdata['locations']=pdata.pop('locations',None)
pdata['facets']=pdata.pop('facets',None)
# other columns need to be ranamed
Projects.objects.create(**pdata)
num.replace(',', '_')