DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
Weakdancer

关于GQL的使用问题

  •  
  •   Weakdancer · Dec 4, 2010 · 4793 views
    This topic created in 5659 days ago, the information mentioned may be changed or developed.
    今天刚看了GAE database ,对GQL的使用很困惑


    <script src="https://gist.github.com/728218.js"> </script>


    NowDay,NoTime,NowWeek,都是整型.


    现在我想实现代码中的那句查询用GQL该怎么写?

    这样写肯定不对:

    db.GqlQuery("SELECT * FROM time WHERE KCB.time[0] =NowDay AND KCB.time[-1] =NowTime AND NowWeek IN KCb.week ORDER BY date DESC LIMIT 1000")

    应该怎么写呢?望指教.
    3 replies    1970-01-01 08:00:00 +08:00
    Weakdancer
        1
    Weakdancer  
    OP
       Dec 4, 2010
    Weakdancer
        2
    Weakdancer  
    OP
       Dec 4, 2010
    keakon
        3
    keakon  
       Dec 5, 2010
    楼主的表述真的很难懂…

    没猜错的话,你是要把if NowDay==KCB.time[0] and NowTime==KCB.time[-1] and NowWeek in KCB.week改成GQL查询条件吧

    简单来说就是不行,因为datastore不支持复杂的查询,只能将一个属性作为一个整体来查询,不能查询time[-1]这种

    因此你只能这样:
    KCBs = db.GqlQuery("SELECT * FROM kcb WHERE week = :1 ORDER BY date DESC LIMIT 1000", NowWeek)
    for KCB in KCBs:
    if NowDay==KCB.time[0] and NowTime==KCB.time[-1]:
    #...

    week是一个ListProperty,查询的时候直接用=就行了,IN的语义不是你理解的这样的

    最后提醒一下,不是有特殊需求的话不要用GQL,因为查询较复杂时,构造非常不方便,而且性能很差。所有GqlQuery对象都能用等价且更方便高效的Query代替。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3262 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:13 · PVG 21:13 · LAX 06:13 · JFK 09:13
    ♥ Do have faith in what you're doing.