You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将指定SQL查询语句转换为Peewee框架实现代码

将SQL查询转换为Peewee实现

1. 定义对应的数据模型

首先需要为Loot、Quests、Rewards三张表定义Peewee模型(假设已存在数据库连接对象db):

from peewee import Model, IntegerField, CharField

class BaseModel(Model):
    class Meta:
        database = db

class Quests(BaseModel):
    questID = IntegerField(primary_key=True)
    # 可根据实际表结构补充其他字段

class Rewards(BaseModel):
    rewardID = IntegerField(primary_key=True)
    tokenContract = CharField()
    rewardCount = IntegerField()
    # 可根据实际表结构补充其他字段

class Loot(BaseModel):
    questID = IntegerField()
    rewardID = IntegerField()
    tokenID = IntegerField()
    # 可根据实际表结构补充其他字段

2. 实现对应查询逻辑

对应原SQL的Peewee查询代码如下:

# 执行查询,返回字典格式结果
parts_test = (Loot
              .select(Loot.tokenID, Rewards.rewardCount)
              .join(Quests, on=(Loot.questID == Quests.questID))
              .join(Rewards, on=(Loot.rewardID == Rewards.rewardID))
              .where((Quests.questID == quest_id) & (Rewards.tokenContract == PARTS_ADDR))
              .order_by(Rewards.rewardCount)
              .dicts())

# 若需要和原SQL fetchall()一致的元组列表格式,可转换结果
parts_test_list = list(row.values() for row in parts_test)

对应关系说明

  • .select(Loot.tokenID, Rewards.rewardCount):对应SQL的SELECT tokenID, rewardCount
  • .join(Quests, on=(Loot.questID == Quests.questID)):对应INNER JOIN Quests ON Loot.questID = Quests.questID
  • .join(Rewards, on=(Loot.rewardID == Rewards.rewardID)):对应INNER JOIN Rewards ON Loot.rewardID = Rewards.rewardID
  • .where(...):对应SQL的WHERE条件,Peewee用&表示逻辑与(需用括号包裹单个条件)
  • .order_by(Rewards.rewardCount):对应ORDER BY rewardCount

内容的提问来源于stack exchange,提问作者Dorius Kornely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:51:19