У меня есть экземпляр peewee Model my_table = MyTable()
, из которого я хочу выбрать несколько экземпляров модели.
Я не понимаю, почему это работает:
In [0] [selection.p_name for selection in my_table.select() if selection.p_type == "Solar"]
Out [0] ['Solar, photovoltaic',
'Solar, photovoltaic',
'Solar, photovoltaic',
'Solar, photovoltaic',
'Solar, concentrated solar power',
'Solar, concentrated solar power']
но это не так:
In [1] selections = my_table.select().where(my_table.p_type=="Solar")
In [2] [t.p_name for t in selections]
Out [2]
Ничего не выводится. На самом деле len(selections)=0
Я что-то не так делаю?
Мое определение модели находится в одном файле и выглядит следующим образом:
cafe3db = SqliteDatabase(db_fp)
class Cafe3BaseModel(Model):
class Meta:
database = cafe3db
class ScenarioTable(Cafe3BaseModel):
pathway_scenario_key = CharField(primary_key=True)
pathway_type = CharField()
pathway_name = CharField()
cafe3db.create_tables([ScenarioTable])
Затем я заполняю таблицы. Вот снимок экрана базы данных SQLite, как видно из БД Browswer для SQLite:
Затем я создаю экземпляр таблицы:
scene_table = ScenarioTable ()
Затем в оболочке Python я импортирую экземпляр:
from x.y import scenario_table
Я знаю, что у меня есть все ожидаемые экземпляры модели (112):
>>> len(scenario_table.select())
112
И это работает:
>>> [t.pathway_name for t in scenario_table.select() if t.pathway_type == 'Coal']
['Coal, sub-bituminous', 'Coal, bituminous', 'Coal, lignite', 'Coal, sub-bituminous', 'Coal, lignite', 'Coal, bituminous', 'Coal, bituminous', 'Coal, lignite']
Но это не так:
>>> [t.pathway_name for t in scenario_table.select().where(scenario_table.pathway_type == 'Coal')]
[]
После проб и ошибок я смог заставить работать вещи, импортировав модель напрямую, а не экземпляр модели.
Итак, а не:
from x.y import scenario_table
Теперь у меня есть:
from x.y import ScenarioTable
и сейчас:
selections = ScenarioTable.select().where(ScenarioTable.pathway_type=='Coal')
[t.pathway_name for t in selections]
Возвращает ожидаемый список имен экземпляров модели.
Итак, мой вопрос сейчас: почему работает экземпляр модели select
, а не экземпляр модели where
?