我有一个Peewee模型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数据库的屏幕截图,如用于SQLite的DB Browswer所示:
然后我创建表的一个实例: scheme_table = ScenarioTable()
然后,在Python Shell中,导入实例:
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
却不起作用?
答案 0 :(得分:1)
我正在尝试重现您的问题,但不能。
首先,我创建数据库和表:
public class F1 {
public static void main(String args[])throws Exception{
Scanner X =new Scanner(new File("C:\\data1.txt"));
Scanner Y =new Scanner(new File("C:\\data2.txt"));
double a=0.0,b=0.0,c,d=0.0,e=0.0,f,g,h;
List<Double>list1=new ArrayList<>();
List<Double>list4=new ArrayList<>();
double arr[]=new double[10];
double arr1[]=new double[5];
while (X.hasNext()) {
a = X.nextDouble();
list1.add(a);
b = X.nextDouble();
c = X.nextDouble();
}
while(Y.hasNext()) {
d = Y.nextDouble();
list4.add(d);
e = Y.nextDouble();
f = Y.nextDouble();
g = Y.nextDouble();
}
for(int i=0;i<list1.size();i++) {
arr[i]=list1.get(i);//Store value into an array
}
for(int j=0;j<list4.size();j++){
arr1[j]=list4.get(j);//Store value into an array
}
for(int k=0;k<arr.length;k++){
// Appending condition
}
}
然后我插入两行:
import peewee
db = peewee.SqliteDatabase('test.db')
db.connect()
class my_table(peewee.Model):
p_name = peewee.CharField()
p_type = peewee.CharField()
class Meta:
database = db
db.create_tables([my_table])
之后,我尝试您的命令:
d1 = my_table(p_name="Solar, photovoltaic", p_type="Solar")
d1.save()
d2 = my_table(p_name="Windmill", p_type="Wind")
d2.save()
因此它在这里有效-也许您在做其他错误,但您提供的代码正确