'How to save a database object in PeeWee, if there's recursion error while saving
When I try to save an instance of an object, an error is occurring.
There's my file structure:
class Loader():
dbhandle = SqliteDatabase('history.db')
def __init__(self):
try:
Loader.dbhandle.connect()
Hotel.create_table()
except peewee.InternalError as px:
print(str(px))
try:
HistoryObject.create_table()
except peewee.InternalError as px:
print(str(px))
def save_to_database(self):
history_object = HistoryObject(chat_id=0,
command='123',
date_time='123'
)
history_object.save()
#...
class BaseModel(Model):
class Meta:
database = Loader.dbhandle
class HistoryObject(BaseModel):
id = PrimaryKeyField(null=False)
chat_id = IntegerField()
command = CharField(max_length=100)
date_time = CharField(max_length=100)
class Meta:
db_table = "historyObjects"
On calling save to database method of the Loader class, an error occur:
Traceback (most recent call last):
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 611, in infinity_polling
self.polling(none_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 658, in polling
self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 720, in __threaded_polling
raise e
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 680, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\util.py", line 135, in raise_exceptions
raise self.exception_info
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\util.py", line 87, in run
task(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\Handlers\LowHighPrice.py", line 63, in handle
make_query(message)
File "C:\Users\342\PycharmProjects\python_basic_diploma\Handlers\LowHighPrice.py", line 152, in make_query
loader.save_to_database(0, '123', '123')
File "C:\Users\342\PycharmProjects\python_basic_diploma\loader.py", line 72, in save_to_database
history_object.save()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6577, in save
pk_value = self._pk
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6542, in get_id
return getattr(self, self._meta.primary_key.safe_name)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
[Previous line repeated 488 more times]
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4479, in __get__
return (self.rel_model
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6326, in select
return ModelSelect(cls, fields, is_default=is_default)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6994, in __init__
super(ModelSelect, self).__init__([model], fields)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6859, in __init__
super(_ModelQueryHelper, self).__init__(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 2281, in __init__
super(Select, self).__init__(**kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 812, in __init__
super(_HashableSource, self).__init__(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 768, in __init__
super(Source, self).__init__()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 2042, in __init__
super(Query, self).__init__(**kwargs)
RecursionError: maximum recursion depth exceeded while calling a Python object
"
Traceback (most recent call last):
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 611, in infinity_polling
self.polling(none_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 658, in polling
self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 720, in __threaded_polling
raise e
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\__init__.py", line 680, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\util.py", line 135, in raise_exceptions
raise self.exception_info
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\telebot\util.py", line 87, in run
task(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\Handlers\LowHighPrice.py", line 63, in handle
make_query(message)
File "C:\Users\342\PycharmProjects\python_basic_diploma\Handlers\LowHighPrice.py", line 152, in make_query
loader.save_to_database(0, '123', '123')
File "C:\Users\342\PycharmProjects\python_basic_diploma\loader.py", line 72, in save_to_database
history_object.save()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6577, in save
pk_value = self._pk
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6542, in get_id
return getattr(self, self._meta.primary_key.safe_name)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4481, in __get__
.where(self.field == getattr(instance, dest)))
[Previous line repeated 488 more times]
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 4479, in __get__
return (self.rel_model
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6326, in select
return ModelSelect(cls, fields, is_default=is_default)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6994, in __init__
super(ModelSelect, self).__init__([model], fields)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 6859, in __init__
super(_ModelQueryHelper, self).__init__(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 2281, in __init__
super(Select, self).__init__(**kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 812, in __init__
super(_HashableSource, self).__init__(*args, **kwargs)
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 768, in __init__
super(Source, self).__init__()
File "C:\Users\342\PycharmProjects\python_basic_diploma\my_venv\lib\site-packages\peewee.py", line 2042, in __init__
super(Query, self).__init__(**kwargs)
RecursionError: maximum recursion depth exceeded while calling a Python object
The Loader class also used for instancing and polling bot using pyTelegramBotApi and the method called from another file. Don't know if it could cause problem
The class Loader itself is always instanced once, so __init__ method must be called only once too
A bit more info: While trying to debug it, I wrote in peewee.py package file in getattr a print fucntion to print dest variable. It always equals 'id'.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
