PostgreSQL ошибка 'NumericValueOutOfRange: целое число вне диапазона' после session.commit () в SQLAlchemy - PullRequest
0 голосов
/ 31 января 2020

Я продолжаю получать 'DataError: (psycopg2.errors.NumericValueOutOfRange) integer out of range', вызванное 'NumericValueOutOfRange: integer out of range' при попытке добавить записи в локальную базу данных PostgreSQL с использованием SQLAlchemy.

Вот класс, который я объявил для таблицы. (Я также уже пытался, при необходимости, установить столбцы в Integer, BigInteger и Float, но безуспешно.)

class WRP_Global(Base):
    __tablename__ = 'wrp_global'
    year = Column(Integer, primary_key=True)
    chrstprot = Column(Numeric)
    chrstcat = Column(Numeric)
    chrstorth = Column(Numeric)
    chrstang = Column(Numeric)
    chrstothr = Column(Numeric)
    chrstgen = Column(Numeric)
    judorth = Column(Numeric)
    jdcons = Column(Numeric)
    judref = Column(Numeric)
    judothr = Column(Numeric)
    judgen = Column(Numeric)
    islmsun = Column(Numeric)
    islmshi = Column(Numeric)
    islmibd = Column(Numeric)
    islmnat = Column(Numeric)
    islmalw = Column(Numeric)
    islmahm = Column(Numeric)
    islmothr = Column(Numeric)
    islmgen = Column(Numeric)
    budmah = Column(Numeric)
    budthr = Column(Numeric)
    budothr = Column(Numeric)
    budgen = Column(Numeric)
    zorogen = Column(Numeric)
    hindgen = Column(Numeric)
    sikhgen = Column(Numeric)
    shntgen = Column(Numeric)
    bahgen = Column(Numeric)
    taogen = Column(Numeric)
    jaingen = Column(Numeric)
    confgen = Column(Numeric)
    syncgen = Column(Numeric)
    anmgen = Column(Numeric)
    nonrelig = Column(Numeric)
    othrgen = Column(Numeric)
    sumrelig = Column(Numeric)
    pop = Column(Numeric)
    worldpop = Column(Numeric)
    chrstprotpct = Column(Numeric)
    chrstcatpct = Column(Numeric)
    chrstorthpct = Column(Numeric)
    chrstangpct = Column(Numeric)
    chrstothrpct = Column(Numeric)
    chrstgenpct = Column(Numeric)
    judorthpct = Column(Numeric)
    judconspct = Column(Numeric)
    judrefpct = Column(Numeric)
    judothrpct = Column(Numeric)
    judgenpct = Column(Numeric)
    islmsunpct = Column(Numeric)
    islmshipct = Column(Numeric)
    islmibdpct = Column(Numeric)
    islmnatpct = Column(Numeric)
    islmalwpct = Column(Numeric)
    islmahmpct = Column(Numeric)
    islmothrpct = Column(Numeric)
    islmgenpct = Column(Numeric)
    budmahpct = Column(Numeric)
    budthrpct = Column(Numeric)
    budothrpct = Column(Numeric)
    budgenpct = Column(Numeric)
    zorogenpct = Column(Numeric)
    hindgenpct = Column(Numeric)
    sikhgenpct = Column(Numeric)
    shntgenpct = Column(Numeric)
    bahgenpct = Column(Numeric)
    taogenpct = Column(Numeric)
    jaingenpct = Column(Numeric)
    confgenpct = Column(Numeric)
    syncgenpct = Column(Numeric)
    anmgenpct = Column(Numeric)
    nonreligpct = Column(Numeric)
    othrgenpct = Column(Numeric)
    sumreligpct = Column(Numeric)
    ptctotal = Column(Numeric)
    version = Column(Numeric)

Base.metadata.create_all(engine)

Я не получаю ошибок при создании и добавлении записей в сеанс SQLAlchemy, как показано ниже. :

for i in range(len(WRPglobal)):
    record = WRP_Global(year = int(WRPglobal['year'][i]),
    chrstprot = int(WRPglobal['chrstprot'][i]),
    chrstcat = int(WRPglobal['chrstcat'][i]),
    chrstorth = int(WRPglobal['chrstorth'][i]),
    chrstang = int(WRPglobal['chrstang'][i]),
    chrstothr = int(WRPglobal['chrstothr'][i]),
    chrstgen = int(WRPglobal['chrstgen'][i]),
    judorth = int(WRPglobal['judorth'][i]),
    jdcons = int(WRPglobal['jdcons'][i]),
    judref = int(WRPglobal['judref'][i]),
    judothr = int(WRPglobal['judothr'][i]),
    judgen = int(WRPglobal['judgen'][i]),
    islmsun = int(WRPglobal['islmsun'][i]),
    islmshi = int(WRPglobal['islmshi'][i]),
    islmibd = int(WRPglobal['islmibd'][i]),
    islmnat = int(WRPglobal['islmnat'][i]),
    islmalw = int(WRPglobal['islmalw'][i]),
    islmahm = int(WRPglobal['islmahm'][i]),
    islmothr = int(WRPglobal['islmothr'][i]),
    islmgen = int(WRPglobal['islmgen'][i]),
    budmah = int(WRPglobal['budmah'][i]),
    budthr = int(WRPglobal['budthr'][i]),
    budothr = int(WRPglobal['budothr'][i]),
    budgen = int(WRPglobal['budgen'][i]),
    zorogen = int(WRPglobal['zorogen'][i]),
    hindgen = int(WRPglobal['hindgen'][i]),
    sikhgen = int(WRPglobal['sikhgen'][i]),
    shntgen = int(WRPglobal['shntgen'][i]),
    bahgen = int(WRPglobal['bahgen'][i]),
    taogen = int(WRPglobal['taogen'][i]),
    jaingen = int(WRPglobal['jaingen'][i]),
    confgen = int(WRPglobal['confgen'][i]),
    syncgen = int(WRPglobal['syncgen'][i]),
    anmgen = int(WRPglobal['anmgen'][i]),
    nonrelig = int(WRPglobal['nonrelig'][i]),
    othrgen = int(WRPglobal['othrgen'][i]),
    sumrelig = int(WRPglobal['sumrelig'][i]),
    pop = int(WRPglobal['pop'][i]),
    worldpop = int(WRPglobal['worldpop'][i]),
    chrstprotpct = float(WRPglobal['chrstprotpct'][i]),
    chrstcatpct = float(WRPglobal['chrstcatpct'][i]),
    chrstorthpct = float(WRPglobal['chrstorthpct'][i]),
    chrstangpct = float(WRPglobal['chrstangpct'][i]),
    chrstothrpct = float(WRPglobal['chrstothrpct'][i]),
    chrstgenpct = float(WRPglobal['chrstgenpct'][i]),
    judorthpct = float(WRPglobal['judorthpct'][i]),
    judconspct = float(WRPglobal['judconspct'][i]),
    judrefpct = float(WRPglobal['judrefpct'][i]),
    judothrpct = float(WRPglobal['judothrpct'][i]),
    judgenpct = float(WRPglobal['judgenpct'][i]),
    islmsunpct = float(WRPglobal['islmsunpct'][i]),
    islmshipct = float(WRPglobal['islmshipct'][i]),
    islmibdpct = float(WRPglobal['islmibdpct'][i]),
    islmnatpct = float(WRPglobal['islmnatpct'][i]),
    islmalwpct = float(WRPglobal['islmalwpct'][i]),
    islmahmpct = float(WRPglobal['islmahmpct'][i]),
    islmothrpct = float(WRPglobal['islmothrpct'][i]),
    islmgenpct = float(WRPglobal['islmgenpct'][i]),
    budmahpct = float(WRPglobal['budmahpct'][i]),
    budthrpct = float(WRPglobal['budthrpct'][i]),
    budothrpct = float(WRPglobal['budothrpct'][i]),
    budgenpct = float(WRPglobal['budgenpct'][i]),
    zorogenpct = float(WRPglobal['zorogenpct'][i]),
    hindgenpct = float(WRPglobal['hindgenpct'][i]),
    sikhgenpct = float(WRPglobal['sikhgenpct'][i]),
    shntgenpct = float(WRPglobal['shntgenpct'][i]),
    bahgenpct = float(WRPglobal['bahgenpct'][i]),
    taogenpct = float(WRPglobal['taogenpct'][i]),
    jaingenpct = float(WRPglobal['jaingenpct'][i]),
    confgenpct = float(WRPglobal['confgenpct'][i]),
    syncgenpct = float(WRPglobal['syncgenpct'][i]),
    anmgenpct = float(WRPglobal['anmgenpct'][i]),
    nonreligpct = float(WRPglobal['nonreligpct'][i]),
    othrgenpct = float(WRPglobal['othrgenpct'][i]),
    sumreligpct = float(WRPglobal['sumreligpct'][i]),
    ptctotal = float(WRPglobal['ptctotal'][i]),
    version = float(WRPglobal['version'][i]))

    session.add(record)

Однако, когда я запускаю session.commit(), я получаю следующую трассировку. Значения, которые я пытаюсь добавить в базу данных, указаны внизу.

---------------------------------------------------------------------------
NumericValueOutOfRange                    Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
   1245                     self.dialect.do_execute(
-> 1246                         cursor, statement, parameters, context
   1247                     )

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/default.py in do_execute(self, cursor, statement, parameters, context)
    580     def do_execute(self, cursor, statement, parameters, context=None):
--> 581         cursor.execute(statement, parameters)
    582 

NumericValueOutOfRange: integer out of range


The above exception was the direct cause of the following exception:

DataError                                 Traceback (most recent call last)
 in 
----> 1 session.commit()

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in commit(self)
   1034                 raise sa_exc.InvalidRequestError("No transaction is begun.")
   1035 
-> 1036         self.transaction.commit()
   1037 
   1038     def prepare(self):

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in commit(self)
    501         self._assert_active(prepared_ok=True)
    502         if self._state is not PREPARED:
--> 503             self._prepare_impl()
    504 
    505         if self._parent is None or self.nested:

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in _prepare_impl(self)
    480                 if self.session._is_clean():
    481                     break
--> 482                 self.session.flush()
    483             else:
    484                 raise exc.FlushError(

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in flush(self, objects)
   2477         try:
   2478             self._flushing = True
-> 2479             self._flush(objects)
   2480         finally:
   2481             self._flushing = False

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in _flush(self, objects)
   2615         except:
   2616             with util.safe_reraise():
-> 2617                 transaction.rollback(_capture_exception=True)
   2618 
   2619     def bulk_save_objects(

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py in __exit__(self, type_, value, traceback)
     66             self._exc_info = None  # remove potential circular references
     67             if not self.warn_only:
---> 68                 compat.reraise(exc_type, exc_value, exc_tb)
     69         else:
     70             if not compat.py3k and self._exc_info and self._exc_info[1]:

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py in reraise(tp, value, tb, cause)
    151         if value.__traceback__ is not tb:
    152             raise value.with_traceback(tb)
--> 153         raise value
    154 
    155     def u(s):

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/session.py in _flush(self, objects)
   2575             self._warn_on_events = True
   2576             try:
-> 2577                 flush_context.execute()
   2578             finally:
   2579                 self._warn_on_events = False

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py in execute(self)
    420         else:
    421             for rec in topological.sort(self.dependencies, postsort_actions):
--> 422                 rec.execute(self)
    423 
    424     def finalize_flush_changes(self):

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/unitofwork.py in execute(self, uow)
    587             self.mapper,
    588             uow.states_for_mapper_hierarchy(self.mapper, False, False),
--> 589             uow,
    590         )
    591 

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py in save_obj(base_mapper, states, uowtransaction, single)
    243             mapper,
    244             table,
--> 245             insert,
    246         )
    247 

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/orm/persistence.py in _emit_insert_statements(base_mapper, uowtransaction, cached_connections, mapper, table, insert, bookkeeping)
   1082             multiparams = [rec[2] for rec in records]
   1083 
-> 1084             c = cached_connections[connection].execute(statement, multiparams)
   1085             if bookkeeping:
   1086                 for (

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in execute(self, object_, *multiparams, **params)
    980             raise exc.ObjectNotExecutableError(object_)
    981         else:
--> 982             return meth(self, multiparams, params)
    983 
    984     def _execute_function(self, func, multiparams, params):

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/sql/elements.py in _execute_on_connection(self, connection, multiparams, params)
    285     def _execute_on_connection(self, connection, multiparams, params):
    286         if self.supports_execution:
--> 287             return connection._execute_clauseelement(self, multiparams, params)
    288         else:
    289             raise exc.ObjectNotExecutableError(self)

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_clauseelement(self, elem, multiparams, params)
   1099             distilled_params,
   1100             compiled_sql,
-> 1101             distilled_params,
   1102         )
   1103         if self._has_events or self.engine._has_events:

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
   1248         except BaseException as e:
   1249             self._handle_dbapi_exception(
-> 1250                 e, statement, parameters, cursor, context
   1251             )
   1252 

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _handle_dbapi_exception(self, e, statement, parameters, cursor, context)
   1474                 util.raise_from_cause(newraise, exc_info)
   1475             elif should_wrap:
-> 1476                 util.raise_from_cause(sqlalchemy_exception, exc_info)
   1477             else:
   1478                 util.reraise(*exc_info)

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py in raise_from_cause(exception, exc_info)
    396     exc_type, exc_value, exc_tb = exc_info
    397     cause = exc_value if exc_value is not exception else None
--> 398     reraise(type(exception), exception, tb=exc_tb, cause=cause)
    399 
    400 

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/util/compat.py in reraise(tp, value, tb, cause)
    150             value.__cause__ = cause
    151         if value.__traceback__ is not tb:
--> 152             raise value.with_traceback(tb)
    153         raise value
    154 

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
   1244                 if not evt_handled:
   1245                     self.dialect.do_execute(
-> 1246                         cursor, statement, parameters, context
   1247                     )
   1248         except BaseException as e:

~/anaconda3/lib/python3.7/site-packages/sqlalchemy/engine/default.py in do_execute(self, cursor, statement, parameters, context)
    579 
    580     def do_execute(self, cursor, statement, parameters, context=None):
--> 581         cursor.execute(statement, parameters)
    582 
    583     def do_execute_no_params(self, cursor, statement, context=None):

DataError: (psycopg2.errors.NumericValueOutOfRange) integer out of range

[SQL: INSERT INTO wrp_global (year, chrstprot, chrstcat, chrstorth, chrstang, chrstothr, chrstgen, judorth, jdcons, judref, judothr, judgen, islmsun, islmshi, islmibd, islmnat, islmalw, islmahm, islmothr, islmgen, budmah, budthr, budothr, budgen, zorogen, hindgen, sikhgen, shntgen, bahgen, taogen, jaingen, confgen, syncgen, anmgen, nonrelig, othrgen, sumrelig, pop, worldpop, chrstprotpct, chrstcatpct, chrstorthpct, chrstangpct, chrstothrpct, chrstgenpct, judorthpct, judconspct, judrefpct, judothrpct, judgenpct, islmsunpct, islmshipct, islmibdpct, islmnatpct, islmalwpct, islmahmpct, islmothrpct, islmgenpct, budmahpct, budthrpct, budothrpct, budgenpct, zorogenpct, hindgenpct, sikhgenpct, shntgenpct, bahgenpct, taogenpct, jaingenpct, confgenpct, syncgenpct, anmgenpct, nonreligpct, othrgenpct, sumreligpct, ptctotal, version) VALUES (%(year)s, %(chrstprot)s, %(chrstcat)s, %(chrstorth)s, %(chrstang)s, %(chrstothr)s, %(chrstgen)s, %(judorth)s, %(jdcons)s, %(judref)s, %(judothr)s, %(judgen)s, %(islmsun)s, %(islmshi)s, %(islmibd)s, %(islmnat)s, %(islmalw)s, %(islmahm)s, %(islmothr)s, %(islmgen)s, %(budmah)s, %(budthr)s, %(budothr)s, %(budgen)s, %(zorogen)s, %(hindgen)s, %(sikhgen)s, %(shntgen)s, %(bahgen)s, %(taogen)s, %(jaingen)s, %(confgen)s, %(syncgen)s, %(anmgen)s, %(nonrelig)s, %(othrgen)s, %(sumrelig)s, %(pop)s, %(worldpop)s, %(chrstprotpct)s, %(chrstcatpct)s, %(chrstorthpct)s, %(chrstangpct)s, %(chrstothrpct)s, %(chrstgenpct)s, %(judorthpct)s, %(judconspct)s, %(judrefpct)s, %(judothrpct)s, %(judgenpct)s, %(islmsunpct)s, %(islmshipct)s, %(islmibdpct)s, %(islmnatpct)s, %(islmalwpct)s, %(islmahmpct)s, %(islmothrpct)s, %(islmgenpct)s, %(budmahpct)s, %(budthrpct)s, %(budothrpct)s, %(budgenpct)s, %(zorogenpct)s, %(hindgenpct)s, %(sikhgenpct)s, %(shntgenpct)s, %(bahgenpct)s, %(taogenpct)s, %(jaingenpct)s, %(confgenpct)s, %(syncgenpct)s, %(anmgenpct)s, %(nonreligpct)s, %(othrgenpct)s, %(sumreligpct)s, %(ptctotal)s, %(version)s)]
[parameters: {'year': 1945, 'chrstprot': 160887585, 'chrstcat': 391332035, 'chrstorth': 98501171, 'chrstang': 36955033, 'chrstothr': 13674466, 'chrstgen': 701350290, 'judorth': 856827, 'jdcons': 1426350, 'judref': 1929388, 'judothr': 7796835, 'judgen': 12009400, 'islmsun': 49050320, 'islmshi': 19436742, 'islmibd': 0, 'islmnat': 0, 'islmalw': 0, 'islmahm': 0, 'islmothr': 62273219, 'islmgen': 130760281, 'budmah': 0, 'budthr': 0, 'budothr': 116237936, 'budgen': 116237936, 'zorogen': 12710, 'hindgen': 5389197, 'sikhgen': 20809, 'shntgen': 55228775, 'bahgen': 15495, 'taogen': 120950, 'jaingen': 181, 'confgen': 0, 'syncgen': 428660117, 'anmgen': 33210080, 'nonrelig': 153486530, 'othrgen': 9856926, 'sumrelig': 1636502751, 'pop': 1617000000, 'worldpop': 2250000000, 'chrstprotpct': 0.1001, 'chrstcatpct': 0.2434, 'chrstorthpct': 0.0613, 'chrstangpct': 0.023, 'chrstothrpct': 0.0085, 'chrstgenpct': 0.4362, 'judorthpct': 0.0005, 'judconspct': 0.0009, 'judrefpct': 0.0012, 'judothrpct': 0.0048, 'judgenpct': 0.0075, 'islmsunpct': 0.0305, 'islmshipct': 0.0121, 'islmibdpct': 0.0, 'islmnatpct': 0.0, 'islmalwpct': 0.0, 'islmahmpct': 0.0, 'islmothrpct': 0.0387, 'islmgenpct': 0.0813, 'budmahpct': 0.0, 'budthrpct': 0.0, 'budothrpct': 0.0723, 'budgenpct': 0.0723, 'zorogenpct': 0.0, 'hindgenpct': 0.0034, 'sikhgenpct': 0.0, 'shntgenpct': 0.0343, 'bahgenpct': 0.0, 'taogenpct': 0.0001, 'jaingenpct': 0.0, 'confgenpct': 0.0, 'syncgenpct': 0.2666, 'anmgenpct': 0.0207, 'nonreligpct': 0.0955, 'othrgenpct': 0.0061, 'sumreligpct': 1.012061071, 'ptctotal': 0.718666667, 'version': 1.1}]
(Background on this error at: http://sqlalche.me/e/9h9h)

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...