読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Pythonでdictを比較してassertしたい

単体テストのコードを書いていて、そういう局面にぶち当たりました。結論から言うとこれでOKです。 assert all( (k,v) in source_dict.items() for (k,v) in dest_dict.items() ) こちらを参考にしました。stackoverflow.com

SQLAlchemyでDB固有の関数を実行する

難しいことはありませんでした。以下はMySQLのtruncateという切り捨ての関数を使う例です。 rs = Item.query.\ filter(Item.maker_id == param['maker_id']).\ filter(func.truncate(Item.gedai / Item.price, 1) < 0.6).all() SQLAlchemyのfuncオブジェクト…

SQLAlchemyでクロス集計

こんな感じでできます。 import sqlalchemy from case, func rs = session.query(User,case[ func.sum(case([(User.blood_type == 'A',1)],else_=0)).label("A"), func.sum(case([(User.blood_type == 'B',1)],else_=0)).label("B"), func.sum(case([(User.b…

MySQLで履歴テーブルの最新を取りたい(Group ByとOrder By)

よくありますよね。履歴テーブルの最新を取りたいってやつ。履歴テーブルを顧客で集計して、その最新の履歴をゲットしたい。こういうやつだ。 select id, user_id, access_path, created from logs where year(created) = 2015 group by user_id order by id…

SQLAlchemyの_asdict() メソッドが無くなった

SQLAlchemyの1.0.9では、モデルオブジェクトをdictに変換してくれる _asdict() メソッドが無くなってしまったようです。no attribute というエラーが出た。すごく重宝してたのに・・・こちらを参考にして、切り替えました。stackoverflow.com def get_model_…

ダック・タイピングのメモ

ダック・タイピング - WikipediaJavaのようにjava.lang.Objectがすべての親になっており、必ず階層を必要とする考えで型を決定する場合は、その階層構造から型を決定することが出来るという話らしい。どの階層構造に属しているか否かで型の判別ができます、…

yield 構文がやっとピンと来たかもしれない

「yieldを実行すると、ジェネレーターを生成し現在の処理を中断したまま保持する事が出来ます」って何を言ってんのかサッパリわからなかった。やっとピンとくるコードがあった。What does the yield keyword do in Python?stackoverflow.com # -*- coding: u…

Pythonのexcept文はasキーワードで統一しよう

2.x系ではバージョンによってこう書ける。 #2.x try: pass except Exception, e: raise コメントでご指摘いただいたように、2.6以上であればasキーワードで使えるので、今どき2.6未満のPython使ってる人もそう多くない(だろう)から、下記の書き方で統一する…

SQLAlchemyの OperationalError: MySQL Connection not available エラー

Python3.4 && mysql-connector-python2.0.2で起きたこのエラー。表題の通り、コネクションプールをしているオブジェクトが利用できないと申される。接続は死んでないっぽいのが謎。活きているのに死んでいるみたいな、そんな感じのエラー。MySQL Server has …

Pythonでcsv/tsvを辞書の配列として読み込む

ちょー簡単。 import csv path = '/path/to/file' tsv = csv.DictReader(open(path), delimiter = '\t') for row in tsv: print(row) 1行目が辞書のキーになります。

WTFormsのSelectFieldで選択値(selected)を保持する方法

WTFormsはこの辺がイケてないのぅ。SelectFieldで選択した値を元に検索をかけると、Ajaxでもなければ初期値の値に戻ってしまう。SelectFieldにはdefaultというプロパティがあるが、これはコンストラクタでしか有効にならない。 #これだと選択値が入る select…

Flaskでフォームの配列のパラメータを取得して縦横に変換する

注文明細の数量を変更するような画面を作ってまして、こういうデータ構造でした。 ID 商品名 注文数 2 AAAA 3 3 BBBB 5 4 CCCC 6 5 DDDD 7 IDと商品名と注文数は配列で渡すので、こういうHTMLでマークアップします。 <input type="hidden" name="id[]" value="{{ od.id }}"> <input type="text" name="ordernum[]" value="{{ od.ordernum }}"> で、各々別の配列に入っている値ですが…

Pythonでオブジェクトが入ってるリストをGroupbyして配列に分割する

こんなオブジェクトが格納されているリストがあるとします。 name age sex foo 20 0 bar 30 1 hoge 40 0 それを性別で集計して各々別の配列に格納したい 作りたい配列はこんな感じ i_want_such_a_list = [ (0,(<foo,20,0>,<hoge,40,0>)), (1,(<bar,30,1>)) ] 簡単に出来た class SampleObj: </bar,30,1></hoge,40,0></foo,20,0>…

Python3.xでPDFを作成してFlaskで出力する

やっぱりwkhtmltopdfを使うのが一番簡単。reportlabとか重すぎる。Linuxで使う場合は日本語対応フォントのインストールをお忘れなく。wkhtmltopdfで、wkhtmltopdfのPythonラッパーライブラリがある。pdfkit 0.5.0 : Python Package Index pdfkit 0.5.0 : Pyt…

CentOS6.5でPython3.4+Nginx+uWSGIでバーチャルホスト運用

とりあえずなんとか動きましたって感じで... 以下Vagrant上での作業です。細かい所はあとで。 Python3.4を入れる $ sudo rpm -ivh http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-11.ius.centos6.noarch.rpm $ sudo yum instal…

FlaskでPaginationを実現する方法(Flask-SQLAlchemyを使用)

いやー、Flaskはドキュメントが断片的だ。マイクロフレームワークだとドキュメントもマイクロなんでしょうか。順番に追っていきます。 View部分のコードはこんな感じです。 from flask.ext.sqlalchemy import Pagination @app.route('/user', defaults={'pag…

generate_password_hashが毎回違う結果を返すのにパスワードとして使える理由

改めて読むと勉強になる。確かにここは気になる。Flask - generate_password_hash not constant output python - Flask - generate_password_hash not constant output - Stack OverflowFlaskでは色んなスニペットが登録されており、パスワードのハッシュに…

SQLAlchemyで検索条件の組立方法が知りたい件

how should i construct filters for multiple request parameters in SQLAlchemy?俺だよ俺。質問してみたよ....JavaのS2JDBCというグレイトなORMがあって、何がいいってこのSimpleWhere。検索条件に該当する変数がnullだったら無視してくれるので、ベタに検…

FlaskのBluePrintの簡単なサンプル

これはわかりやすい!英語だけど!blueprintが何をするのかよくわかった。http://www.guyjacks.com/2014/02/18/python-flask-blueprints-simple-example/

BottleでSQLAlchemyの設定を別ファイルに出したい...

Bottleの良い所であるone-file-approachですが、SQLAlchemyのモデル定義も全部1ファイルになってしまう。これをモデル(テーブルとマッピングしているクラス群)を別ファイルに出してimportみたいなことがしたかった。が、Python使い始めて日が浅いのもあって…

continuation line does not distinguish itself from next logical line という警告が出た

SQLAlchemyのチュートリアルやってて、こんなコード書いたら表題の警告がPEPで言われた。 for name in session.query(User.name).\ filter_by(fullname='Adam Jones'): next logical lineというのは次に実行する処理ってことだろう。要は行をまたいでいるの…

Python2.xとPython3.xのprintの違い

ちょっとハマりました。3分ぐらい。 print 'ok' #only 2.x available print('ok') #both version available 上記はPython2.x系だとOKだけど、Python3系だとダメです。Python2系はprint()→print構文という形で実装されていたらしいんだけど、Python3はprint…

Pythonのデコレータ学習メモ

関数を引数に新しい関数を返すだけの話を言語機構としてデコレータという概念で表現しているらしい。コード見たほうが速いので、デコレータのPythonコードを書く。 #関数を引数に取って、 def deco_outer(some_func): def inner(): print "before_some_func"…

PythonとPHPを比較して面白いところを上げてみる

Python面白いです。個人的にこればっかり使いたいです。PHPはやっぱ中途半端感ある。色々と。 タプル・リスト・集合 PHPの配列ってデカイ。何でも配列に入れ込めるし、連想配列で全てが構成できる。PHP4の頃はクラスとかなかったからね、しょうがないね。し…