SQLAlchemyとSQLiteで日付を取り扱う

Filed in Python | SQLAlchemy Leave a comment

あたくしの脳にぼんやりと刻まれている情報によれば、SQLiteは文字列と数値しか扱えないはず。
日付どうする。いやセンセ、日付ぐらいは扱ってくれてもいいのでは。
さておき、SQLAlchemyを通した場合に、なにか賢い仕組みがあるはず。

SQLAlchemyのマニュアルの当該ページには、

Date and Time Types

SQLite does not have built-in DATE, TIME, or DATETIME types, and pysqlite does not provide out of the box functionality for translating values between Python datetime objects and a SQLite-supported format. SQLAlchemy’s own DateTime and related types provide date formatting and parsing functionality when SQlite is used. The implementation classes are DATETIME, DATE and TIME. These types represent dates and times as ISO formatted strings, which also nicely support ordering. There’s no reliance on typical “libc” internals for these functions so historical dates are fully supported.

超訳:
SQLiteは日付型持ってない。SQLAlchemyが独自にこさえてる日付とかの型は、日付フォーマット+SQLiteで使った場合に動作するようになってる。その対象になってるのはDATETIME、DATEおよびTIMEだ。
これらを使う場合に限っては順番とかもちゃんと正しく動くし、ISOフォーマットされた文字列として日付と時刻を表現する。
で、こいつらはlibc内の関数に依存していないので、歴史的な日付が完全にサポートされている。

うわー自信ない。特に最後の一行。逆に読んでたらどうしよう。だって「libc非依存なのでヒストリカルデートが完全にサポートされてる」って、前後つながってる感がない。
だいたい、libcってなんだ。cのライブラリか。

ちょろっと見るとORACLE様の変なページが見つかり、「表 2–10 libc の日付と時間の処理関数」というところで以下の3つの関数の記述がある。

  • getdate() ユーザー形式の日付と時間を変換する
  • strftime() 日付と時間を文字列表現に変換する。
  • strptime() 日付と時間の変換

ははあ。こいつら完全にあたし見たことあるわ、phpで。phpのあの関数ってこいつらをラップしてたんだろか。
見てみる。
こんなページがあった。
PLEAC-PHP(http://pleac.sourceforge.net/pleac_php/datesandtimes.html)

これによると、phpはいろんな方法で日付のサポートをしていて、

  • UNIX/Cライブラリベース
    (localtime, gmtime, strftime, strptime, mktime, time, getdate, gettimeofday)
  • PHPのネイティブ関数(date,strtotime)
  • DateTimeクラスベース

日付の扱い方にこういう種類があるんだよ、とある。
phpのstrftimeとかははラッパーだったんだー、いやそういう感じのことなんだろうなとは思っていたがちゃんと理解した。
Library [libc]-based routinesってことは、Cのライブラリってのがlibcってことでいいんだな。なので、SQLAlchemy+SQLiteにおきましては、こいつらには関係ない作りになってます。ってことですね。
いやー勉強になりました。

, ,

Leap Motion with Python

Filed in LeapMotion | Python Leave a comment

もーなんか、なんつうの、ほっといてもモチベーションがぐわーと上がるとかもないのんで、仕方ないので重い腰を上げることにするのよ。
なんで買った途端にモチベーション下がってんだ。

なんとなくPYTHONPATHを通してみる

結論から言うけどダメ。

>>> import Leap
Traceback (most recent call last):
File ““, line 1, in
File “C:\Program Files (x86)\Leap Motion\LeapSDK\lib\Leap.py”, line 31, in
LeapPython = swig_import_helper()
File “C:\Program Files (x86)\Leap Motion\LeapSDK\lib\Leap.py”, line 23, in swi
g_import_helper
import LeapPython
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。

ああ。やる気なくなる。
いちいち説明するのもめんどくさいので、いきなりゴールにいきますね。

正解:全部同じディレクトリに放り込む

乱暴極まりない。なんだこれ。
あたしんちの場合ですと、site-packages下にleapというディレクトリを掘りまして、

C:/Python27/Lib/site-packages/leap
__init__.py #空ファイル作る
Leap.dll
Leap.lib
Leap.py
LeapCSharp.dll
Leapd.dll
Leapd.lib
LeapJava.dll
LeapPython.pyd
msvcp100.dll
msvcp100d.dll
msvcr100.dll
msvcr100d.dll

Leap.pyと、その下にあったx86もしくはx64の下をぜんぶおなじとこに散らかすことでセットアップ終わります。

>>> from leap import Leap
>>> Leap

ふー。
やっと取り掛かれるって寸法ですぜ。

さんざっぱらエラー吐かれている時に、

fp, pathname, description = imp.find_module(‘LeapPython’, [dirname(__file__)])

なんでここ探してんのかなーって気づく視点が必要でした。
まだまだPythonに慣れてない感じよ。

余談

PyPi探してみると、どーもleapって名前の技術かなんかがあるみたい。
ディレクトリ名はleapmotionとかにした方がいいのかもね。
あたしはそのままやるけどね。

,

英数字混在の文字列から英文字を剥がす

Filed in Python Leave a comment

剥がすというか数字だけ抜き出した文字列にする。
こういうチョイチョイしたものをどうするかで思考時間発生することが多いので、さしあたりメモ書き。

''.join([x for x in "1F2GG345" if x in "1234567890"])
→'12345'

スマートではないけれども。

仕事のちょっとした作業をリモートでやるのにgoogle drive使いました。
いやーこれべんりだねえ。
グループで使えるDropBoxみたいなかんじ。変な挙動する気配あるけど、おおむねいいかんじ。オッケー☆

Scaffoldで先人の知恵を学ぶ

Filed in NDI Leave a comment

SQLAlchemy(+MongoDB)+Jinja2(Genshi)
この組み合わせはあるだろう。Github眺めたら実際あった。
あたしが当面やりたいことがRapidGizaで解決してる。
とおもいきや既にgithub死んでました。いい名前なのに。
PythonのWAF周辺のライブラリ名は結構好きです。ピラミッド、アルケミー、フラスコ、クフ、エリクサーなんてのもあったな。こういう妖しい単語大好き。
はい。

App/app/scripts/initializedb.py:

- from .models.models import (
+ from ..models.models import (

modelをmodelsディレクトリに移動してまとめたので書き換え。
そのままルートにばらまいてる人はそのままでおk
あんま小分けにしても使いづらいのかなあ。みんなディレクトリ切って小分けにしてしまっちゃいました。

models/
lib/
scripts/
tests/
web/
  templates/
  views/
  static/
    css/
    js/
    img/
__init__.py
const.py

こんな按配です。
ディレクトリの配置やconst.pyなどについては、shazow / pyramid_scaffolds_decoupledさんやグローバル定数@rm -rf /さんを参考にしました。

コレにともなってapp/__init__.pyの中がちょっと書き換わりますね。

config.add_static_view('static', 'web/static', cache_max_age=3600)

config.scan('.web.views') # views
config.scan('.lib')

Pylonsでいうところのhelperをどっかに置きたい。libを切ればいいか。
PyConJP2012で、Pyramidにはhelperない云々、WebHelperとかそういうの使ってくださいという話を聞き、にわかに情緒不安定になり、言いつつも実はPylonsっぽいhelperの使い方もします、みたいな、なんだか狐につままれたような話を聞いてきたばっかりなのであります。
h.hoge()とかしたくない?したいよねえ。

あんまり意識していなかったんですが、Pyramidっていうのはメタフレームワークなのかな。土台あるんで好きに(俺俺フレームワークを)構築してノウハウ貯めこんだりしちゃってくださいよというような。
なんかFlask意識したっぽい「1ファイルで動く代物書けちゃう!」みたいなデモはする必要ないよね。1ファイルで済むようなもの作りたければ普通Flaskとか使う。
#学習コスト云々といった理由は除く

ともあれ、構成とか落ち着いたらScaffoldの作成にも手を出してみたい。
この機能はステキだ。

,

PyConJPにいってきた

Filed in Python Leave a comment

「つながるPython」がメインテーマ。
#なにとつながったのかはよく分からなかった。

収穫は本当にたくさんあって、

  • 8月中に申し込んでたのでTシャツもらえた
  • さらに余ってたのでもう一枚買った
  • PyConJP2012のロゴが入ったシールもらえた
  • Python3に移行しないと遅れちゃうかなあという不安はしばらく忘れてよい

みたいな。
あたし的な目玉はPyramidです。Pyramidのセッションがあるから見に行ったという方が正しいか。ずーっと長いことPylonsをこねくり回してアレコレやろうと画策してきたあたしのためのセッション群と言えました。
また、個人的には(違和感があって)使わないDjangoのセッションもたくさん。スケジュールの都合上見られなかったセッションも色々。
いくつか見ましたがとくに

この方々のセッションはとくに興味深く、楽しく効くことが出来ました。まさに珠玉。
everesさんはWebフレームワークパネルというプログラムでDjango代表として喋っておられました。なんかもう切り返しとかいちいち見事で、話が上手な方だなーと感心することしきり。
Ianさん、hirokikyさんはDjango、aodagさんはPyramidの話をそれぞれ。
Pylonsとか追っかけてたらaodagさんの書き物には必ずお世話になるので、あたしにとっては神様です。
いやー見に行ってよかった。改めてちゃんとPyramidやってみよう・Pylonsからの移行を考えてみようと思える内容でした。
あたしはテストをないがしろにするクズだったので、清水川さんのセッションは大変に勉強になりました。テストちゃんと書こう。Ianさんの言ってたpdb?も使おう。

前にも感じた自分への宿題

「私はこれこれを{作っている/メンテしている/書いている}人です」
と言える材料がないと、ほんとなんだかただ見て帰る感じになっちゃうなーということでした。

ミス

初日にノートPCもってったんですけどね。
このノートかなり放置してたので前日にUbuntuのアップデートをガーっとやったんです。
切ってたUnityが復活。キーボードレイアウトの選択ミスって日本語打てない。もうやだ。
重かったせいもあって、二日目は持ち歩かないことにしました。ないわほんと。

もう一個。ミスっていうミスじゃないんだけど集合写真で最前列真ん中にするするっとたどり着いちゃって、そのまま撮影されちゃった……。お前誰だ感というか場違い感というか、ひどい。
ポジショニングには気をつけたいですね。

,

Python 良い慣用句、悪い慣用句

Filed in 未分類 Leave a comment

Python 良い慣用句、悪い慣用句
http://www.python.jp/doc/release/howto/doanddont.html
ちゃんとよまなければならぬ。

いまいちわからんと放置してたRabbitMQだけど、久しぶりに触ってみたらおおまかな仕掛けというか概観というか見えるようになってきていた。
機能そのものはまだ使えるとこまで来てないけど。

Python type()

Filed in Python Leave a comment

>>> dict
<type 'dict'>
>>> type(dict)
<type 'type'>

あたりまえー

なんでかしんないけど、しばしばtypes()とtypoする

三流phperがpythonやwsgiのなにでつまづくかっていうと

Filed in Apache | php | Python | 未分類 Leave a comment

ぜんぶapacheさんがよろしく沙汰しとってくれてた部分も意識する必要があって、
「そんなことしないと動かないの?」
っていうのが大きい。と思うのね。
その違和感と言うかギャップというのか、そういうのを解消する助けになる記事をそのうち書こうと思います。

  1. アプリケーションサーバっつうのがあって、ポート開いて待受をしたりする。アパッチさんやNginxさんあたりがポート80番で受け取ったのを、別ポートで待ち受けてるアプリケーションサーバに渡したりするんだな。apache:80→pylons:8050とかさ。そういうの。
  2. phpはapacheモジュール(mod_php)で動くから、Permissionいじんなくてもいいんだな。あいつが色々とやってくれる運びになってる。pythonも昔はmod_pythonとかあったけど今使う人あんまいないよ。wsgiっつうしかけがあって、説明読んでも意味分からんかもだけどそっちが主流ってもっぱらの噂
  3. いっちばん最初に1ファイルのCGIでもいいのでpython動かしてみよう、のときにどうしたら良いのか正直わからない
  4. php.net/manual/jaみたいなわかりやすい総本山が見つからない。ここ見て
  5. あと、version2.5のだけどチュートリアルを何度も読むのがいいと思う。コマンドラインとかで色々やるのつまらないと思うけど、ひととおりやって、それからCGIで動かしてみるっていう順番でライブラリリファレンス見るといいと思います。HTMLになってくれないと調子でないよね正直。
  6. 「借りてるレンタルサーバはpythonって入ってない」これ多くてコケる人多いと思う。ソース落としてきてコンパイルしちゃえよ。./configure prefix=/home/youraccount/pythonってやりさえすればいいんだ。ほんとよ(これはそのうち書く)。
  7. いまどきはvirtualpythonぽ
  8. PEARいっこどどんと落としてくれば済んだのにじぶんでeasy_install!pip!→import!import!ってめんどくさい。分かるよ兄弟。でもrequire_onceつかってたろ。同じことだよ
  9. auto_loadだっけ。あれは悪魔の所業だ。どこで何が起きてるのかわからないじゃんね
  10. どっかで定義すれば適当に使えていた定数とか、あれnetbeansでも入れてなければ、どこで定義されてるか追いかける気にもならないよね。pythonのimportでフルパスに近い書き方させられるのは、書いたあとで手を入れたとき、重要な意味を持つってわかると思う。もっともpythonも最近は相対パスっぽい呼び方できるんだけど、まあ「どこにあるそれを呼ぶのか」が明示的なのはメリット大きい
  11. そんなの規約で定めればいいじゃん、結構ですがそのルールきちんと機能し続けるにもなかなか苦労が
  12. 2と3どっちがいいの!?2011年11月時点では2.7でよいと思いますのよ

Continue Reading

,

usort in Python

Filed in Python Leave a comment

特定キーでソートするってのをワラワラ関数垂れ流したくない

L = [{'key_a':'aaa','key_b':456},
     {'key_a':'ccc','key_b':123},
     {'key_a':'bbb','key_b':987},
     {'key_a':'ddd','key_b':567},
     ]

def usort(key):
    """
    関数を返す
    """
    fnc = None
    def f(a,b):
        return cmp(a[key],b[key])
    return f

for x in L:print(x)

L.sort(usort('key_a'))
for x in L:print(x)

L.sort(usort('key_b'),reverse=True)
for x in L:print(x)

やっとさいきん、関数を返すということがわかってきた気がする。理解遅い。

これが

{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'ccc', 'key_b': 123}
{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ddd', 'key_b': 567}

こう

{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ccc', 'key_b': 123}
{'key_a': 'ddd', 'key_b': 567}

こう

{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ddd', 'key_b': 567}
{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'ccc', 'key_b': 123}

メモメモ

Filed in NDI Leave a comment

仙人の心得 linux:proxy接続環境で設定すること
http://blog.mktime.com/archive/20.html

PHP » PYTHON
http://www.php2python.com/
これやばい。あたしのよーなうんこPHPerには福音となるのではないか。くわ。

phpでいうstr_padってどうしたらいいのー
http://www.php2python.com/wiki/function.str-pad/
こういう具合。やばい。

,

TOP