当我试图保存对象的实例时,会发生错误。
这是我的文件结构:
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"
在调用save to database
类的Loader
方法时,会发生以下错误:
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
Loader
类还用于使用pyTelegramBotApi和从另一个文件调用的方法来实例和轮询bot。不知道它是否会引起问题
类Loader
本身总是只实例一次,因此必须只调用__init__
方法一次。
更多的信息:在尝试调试它时,我用peewee.py
包文件在getattr
中编写了一个打印函数来打印dest
变量。它总是等于'id'
。
发布于 2022-02-10 19:49:21
这个问题出现在数据库的另一个表中,后者与ForeignKeyField(HistoryObject, related_name='id')
的第一个表有关。属性related_name
破坏了所有这些,在移除属性之后,一切都很好。
https://stackoverflow.com/questions/71056545
复制相似问题