2008年6月6日金曜日

GAE 一括更新

SDK 1.10 から Gql でも  !=  がサポートされたが、これは

<=, >= などと同じ扱いなので、 日付で <=  を使うと、  他の条件で !=  が使えなくなる。

また、 order by などの sort  も <=  を利用した場合、その  property に限られる。

# RDBMS に比較するといろいろ制約があるが、データが溜まった後での
# 変な苦労からは開放されるか。

検索結果をまた絞ることもできるが、 key() まで対応するのは...。
key は不要で、 referece からみの関連する model がないのであれば対応可能。

結局、property を追加し batch でデータ更新することで対応。
バッチの更新は動作したが、 alter table add column などしないで、
model の定義を書き換えるだけで、
property を追加することができるのはいいが、どうもデータが蓄積された後、
追加したところは不安定な様子で、本体での更新処理が なぜがうまくいかない。

rr = db.GqlQuery("select * from Blog ")

for r in rr:
  print r.title,r.list_mode, r.open_mode
  r.list_mode = '0'
  r.put()

#db.put(rr)
-----

blogs = []
for b in blogs_tmp:
if b.category <> category:
blogs.append({
# key() : b.key(),
'author' : b.author,
'title' : b.title,
'content' : b.content,
'category' : b.category,
})

1 コメント:

kwin786 さんのコメント...

entities.append({
'key': str(entity.key()),
'key_name': entity.key().name(),
'key_id': entity.key().id(),
'shortened_key': str(entity.key())[:8] + '...',
'attributes': attributes,
'edit_uri': edit_path + '?key=' + str(entity.key())
+ '&kind=' + urllib.quote(self.request.get('kind'))
+ '&next=' + urllib.quote(self.request.uri),
})

SQL and GQL                                             TOP

is null from google.appengine.ext import db
r = db.GqlQuery ("SELECT * FROM model WHERE property=:1",None) # None is the python Null. / see
count(*) r.count()
like r = db.GqlQuery("SELECT * FROM model WHERE property >= :1 and property < :2 ", search_key, urllib.unquote(search_key).decode("utf8") + u"\uFFFD" )
update see
!=!= # see
dateyymm = '2008-05-10 22:22:22' # see ydate = datetime.datetime.strptime(yymm, '%Y-%m-%d %H:%M:%S')
日付検索 from datetime import *
import datetime
d1 = datetime.datetime.strptime('2008-06-01', '%Y-%m-%d')
d2 = d1 + timedelta(days=10)
r = db.GqlQuery("select * from model where date >=:1 and date <:2 ",d1,d2)
 for rr in r: print datetime.datetime.strftime(rr,'%Y-%m-%d %H:%M:%S')
Dates and Times
datastore viewer
http://localhost:8080/_ah/admin/datastore?kind=StockSum&order=-nikkei_max&order_type=float&num=100&start=0
referencesee (back-references), Many-to-many Join
key, key_name ,id Key names and IDs cannot be used like property values
× select * from Greeting where key = "xxxx"
× select * from Greeting where id = xxx
○ r = Greeting.get(db.Key.from_path('Greeting', id)) # or key_name
○ r = db.get("agpoZWxsb3dvcmxkcgsLEgRCbG9nGNQBDA")
key = r.key()
id = r.key().id()