例えばDDLでBIGINT使いたい場合は下記のように sqlalchemy.dialects.mysql から import する。
あと engine = InnoDB したい場合は __table_args__ を使うらしい。詳細はSQLAlchemyのドキュメントを参照。
from sqlalchemy import Column, Unicode
from sqlalchemy.dialects.mysql import BIGINT
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'user'
__table_args__ = { 'mysql_engine':'InnoDB' }
id = Column(BIGINT, primary_key = True, server_default = '0')
name = Column(Unicode(255), nullable = False)

Python クックブック 第2版
著者/訳者:Alex Martelli Anna Martelli Ravenscroft David Ascher
出版社:オライリー・ジャパン( 2007-06-26 )
大型本 ( 652 ページ )
Javaで文字列を結合するときは一般的にはStringBuilderを使うけど、個人的には結合後の文字列がより直感的になるString.format() が好き。ただ、ソースを見ると明らかにString.format()は遅そうなのでベンチを取ってみた。
1万回ループを実行した場合の結果は
- StringBuilder: 76 ms
- String.format: 615 ms
となってStringBuilderの方が圧倒的に速い。個人的にはLL慣れしているのもあってString.format()の方が圧倒的に見やすくて好きなんだけど、スピードが要求されるときはやっぱりStringBuilder使わないと駄目だと思った次第。
ちなみに測定環境は下記。
- CPU: Intel Core i5 2.3Ghz Macbook Pro
- OS: Mac OSX SnowLeopard
- Java: java version “1.6.0_26″, Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425), Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)
MySQL Casual Talks Vol.2で20分枠をもらって話してきた!こんなに長い時間人前で話すのは初めてだったので緊張しまくりでした。話した内容は仕事(ピグ)で利用しているMySQL上で運用しているNoSQLのやり方について。MySQLの設定とかの話は一切せずJavaのコードがメインでした。
正直、myfinderさんに声をかけられたときはどうしようかと悩んだけど、こういう経験はなかなかできないので良かったです。場数を踏むっていうのも重要ですしね。懇親会では riywo さんとシステム運用のガチトークをできたし、DeNAの人とたくさん絡めてよかったですw riywo さんが「MySQL Formal Talksやっても来るメンバーって変わらないよね」って言ってたのがなんともこの勉強会を象徴していて妙に印象に残っていますw
Vol.3 があったら今度は弊社メンバーの誰かにFusion-IOの話をしてもらいたいなぁ。
下記のようにテスト結果をカラフリャにしてくれる。ただし0.2.4はテストに失敗すると”TypeError: enumerate() takes exactly 1 argument (2 given)”というエラーになるので、こんな感じで修正が必要。
びふぉー

あふたー

結論から言うと下記が最もスマートでモダンな書き方っぽい。
f = open('/tmp/test.txt')
for line in f:
print line
f.close()
※追記
Python2.5以降ならwithを使うともっとモダンというのをコメントやらブクマコメントで教えてもらった。
from __future__ import with_statement
with open('/tmp/test.txt') as f:
for line in f:
print line
下記は古いやり方。(ってPythonクックブックに書いてあった)
f = open('/tmp/test.txt')
while True:
line = f.readline()
if not line:
break
print line
f.close()
下記はファイルの中味が全部メモリに乗っちゃうから危険。
f = open('/tmp/test.txt')
for line in f.readlines():
print line
f.close()
まとめ(イテレータ)
for line in f:
print line
という書き方ができるのはfileが__iter__()とnext()を実装しているおかげ。詳しくはPEP-234に詳しく書いてある。

Python クックブック 第2版
著者/訳者:Alex Martelli Anna Martelli Ravenscroft David Ascher
出版社:オライリー・ジャパン( 2007-06-26 )
大型本 ( 652 ページ )
そういえばISPをso-netに変えてからSMTPの設定変更してなかったのでメモ。
まずは /etc/postfix/main.cf に以下を追記。
relayhost = [mail.so-net.ne.jp]:587
smtp_sasl_type = cyrus
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/so-net_password
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN
/etc/postfix/so-net_passwordはこんな感じ。
[mail.so-net.ne.jp]:587 @.so-net.ne.jp:
$ sudo chmod 640 /etc/postfix/so-net_password
$ sudo postmap /etc/postfix/so-net_password
$ sudo /etc/init.d/postfix restart
でおk。あとはメール送信のテストする。
echo test | mail *****@gmail.com
これでメールが送られていれば成功。

Postfix実用ガイド
著者/訳者:Kyle D. Dent
出版社:オライリージャパン( 2004-08-15 )
大型本 ( 307 ページ )
コメント