У меня есть объекты, разработанные с помощью peewee на Python.Прежде чем приступить к реализации реальной базы данных, я провел несколько тестов с базами данных в памяти.Когда я начал реализовывать функциональность базы данных, я столкнулся со странной проблемой.Мои запросы возвращают пустые результаты, что еще зависит от того, запускаю ли я скрипт или использую консоль python.
Прежде всего, позвольте мне доказать, что логика верна.Когда я использую консоль Python, все в порядке:
>>> from Entities import *
>>> print (RouterSettings.select().where(RouterSettings.name=='RUT00').get().name)
RUT00
Как видите, все правильно.Конкретный запрос выполняется и возвращает результат.Теперь то же самое в сценарии:
from Entities import *
print (RouterSettings.select().where(RouterSettings.name=='RUT00').get().name)
Это возвращает исключение Запрос на сопоставление экземпляра не существует
print (RouterSettings.select (). Где(RouterSettings.name == 'RUT00'). Get (). Name) Файл "C: \ Users \ Kamil \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ site-packages \ peewee.py", строка5975, в get (clone.model, sql, params)) Entities.RouterSettingsDoesNotExist: запрос на сопоставление экземпляра не существует: SQL: SELECT "t1". "Id", "t1". "Name", "t1". "Ip"," t1 "." username "," t1 "." пароль "," t1 "." model "," t1 "." phone_num "," t1 "." provider "," t1 "." location "FROM"routersettings" AS "t1" ГДЕ ("t1". "name" =?) LIMIT?ОФСЕТ?Параметры: ['RUT00', 1, 0]
Когда я пытался отлаживать, я обнаружил, что база данных как будто не создана: Обратите вниманиечто в отлаживаемых переменных объект базы данных равен нулю (нет).Есть ли у вас какие-либо идеи, что происходит?
Мои сущности определены следующим образом:
from peewee import *
class EnumField(IntegerField):
def __init__(self, *argv):
super().__init__()
self.enum = []
for label in argv:
self.enum.append(label)
def db_value(self, value):
try:
return self.enum.index(value)
except ValueError:
raise EnumField.EnumValueDoesnExistError(
"Value doesn\'t exist in enum set.\nMaybe you forgot to add "
"that one: " + value + "?")
def python_value(self, value):
try:
return self.enum[value]
except IndexError:
raise EnumField.EnumValueDoesnExistError(
'No value for given id')
class EnumValueDoesnExistError(Exception):
pass
class ModelField(EnumField):
def __init__(self):
super().__init__('RUT955_Q', 'RUT955_H', 'GLiNet300M')
class ProviderField(EnumField):
def __init__(self):
super().__init__('Orange', 'Play', 'Virgin')
class BaseModel(Model):
class Meta:
database = SqliteDatabase('SIMail.db', pragmas={'foreign_keys': 1})
class RouterSettings(BaseModel):
name = CharField(unique=True)
ip = CharField(unique=True)
username = CharField()
password = CharField()
model = ModelField()
phone_num = IntegerField(unique=True)
provider = ProviderField()
location = CharField()