我正在使用包含计算机及其进程的数据库进行操作。
我想选择缺少名称为“ proc”的进程的计算机。
在下面查看我的尝试
from peewee import *
mysql_db = MySQLDatabase('dbname', host='host', port=3306, passwd='passwd')
class BaseModel(Model):
class Meta:
database = mysql_db
class Computers(BaseModel):
computerid = IntegerField(primary_key = True)
name = CharField()
class Processes(BaseModel):
processid = BigIntegerField(primary_key = True)
computerid = ForeignKeyField(Computers, backref = 'processes', db_column='computerid')
name = CharField()
mysql_db.connect()
proc_computers = (Computers
.select(Computers, Processes)
.join(Processes)
.where(Processes.name == 'proc')
)
non_proc_computers = (Computers
.select()
.where(Computers.computerid.not_in(lttray_computers))
)
这将导致peewee.InternalError: (1241, 'Operand should contain 1 column(s)')
有人可以指出我似乎做错了什么吗?我正在尝试遵循以下文档:http://docs.peewee-orm.com/en/latest/peewee/query_operators.html
有更好的方法吗?
谢谢!
答案 0 :(得分:1)
可能您想使用EXISTS:
subq = Process.select().where(
(Process.name == 'proc') &
(Process.computer == Computer.id))
query = Computer.select().where(~fn.EXISTS(subq))
注意:最佳实践是不要对模型类使用复数形式。同样,请勿在字段名称中包含“ xxx_id”。