發表文章

目前顯示的是有「Python」標籤的文章

Access MySQL db from python

It's simpler than I expect. >>> import MySQLdb >>> db = MySQLdb.connect("server ip", "username", "password", "db name") >>> cursor = db.cursor() >>> cursor.execute("sql statement") >>> data = cursor.fetchone()

Data store encoding issue

唔, 為了省空間, 想把一些放在 app engine data store 裡的文字, 用 zlib 壓縮起來放到 blob 裡. 在壓的過程中發現一些exception. 找了一些方法, 現在大致可以運作了... 原本 import zlib compressed = zlib.compress(log)  # 這行就會發生exception 現在改成 compressed = zlib.compress(log.encode('utf-8'))  # 這樣就可以了 但是在unzip的時候, 也要decode回來. zlib.decompress(compress).decode('utf-8') 這樣內容才會對喔...

Python 的簡短寫法

在 python 裡有時候我需要取得一個str的長度. len(a). 但是a有時候可能是None. 所以我就要 length = 0 if a:     length = len(a) 這樣子要三行吶. 後來得知可以這樣寫 length = len(a) if a else 0 cool!

app engine datastore benchmark

用 app engine 最難以適應的應該就是 data store 了, 它是基於big table做出來的一種分散式的資料庫. 因為是分散式, 號稱非常scalable. 不過也因為是分散式, 很多在relational database很直覺的功能都不能用. app engine 還有每個request只能執行30秒的限制, 所以一些database更新的行為要分段做, 更增加寫程式的困難度. 寫的時候除了更小心一點, 我還想知道app engine到底寫data store有多慢. (或多快?)

用cron來觸發mapreduce job

GAE + mapreduce雖然好用, 但是老要用它那個簡單的介面來觸發一個job. 不能自動化的每天自動起來做些統計的事, 感覺挺蠢的. 一直在找要怎麼加, 才能在cron.yaml裡觸發. 終於被我試出來了. 首先, 先指定一個url給特定的handler. 最簡單就是在app.yaml把所有link都導到main.py. app.yaml - url: .*   script: main.py 然後在main.py裡加一段 def main():     application = webapp.WSGIApplication(...         ('/tasks/summary', SummaryHandler)],         debug=True)     util.run_wsgi_app(application) 重點就是這個SummaryHandler. class SummaryHandler(webapp.RequestHandler):     def get(self):         name = 'count'         handler_spec = 'main.process'         reader_spec = 'mapreduce.input_readers.DatastoreInputReader'         reader_parameters = {'entity_kind': 'main.Client'}         start_map(name, handler_spec, reader_spec, reader_parameters) 當然啦, 前面要from mapreduce.con...

python怎麼sort dictionary?

為了做一個統計的圖表, 我對python的list操作又熟悉了一點. 這是要用server蒐集到的一堆資料, 做幾張圓餅圖. 那些資料會被統計為"A發生n次, B發生m次, C發生i次, D發生j次", 以此類堆. 可能有數十到數百種, 每個的發生次數不一, 從個位數到幾千幾萬都有可能.