SQLObjectでSQLiteを使うときの注意

TurboGearsにも使われてるORマッパのSQLObject。

SQLiteを使うときは、 パスの:を|に、バックスラッシュはスラッシュに置換。

uri=”sqlite:///ドライブレター|/path/to/filename.db”

単体で使っても便利、なんですが、SQLiteを使うときの接続用スキームの書式を調べてたら1時間ぐらいかかっちゃったので、忘れないようにメモ
以下サンプルコード


[pukiwiki]
*[[SQLObject 0.7ドキュメント邦訳:http://ymasuda.jp/python/sqlobject/doc_0.7/SQLObject.html]]
*[[Turbogearsプロジェクトのモデルを作る:http://nagosui.org/Nagosui/COREBlog2/edit-projects-model]]
の補足。
SQLiteを使うときは、 :を|に、バックスラッシュはスラッシュに置換。

適当に手元のソースから抜書きしたのでこのままだと動かないかも。
_import os
_from sqlobject import *
_class Link(SQLObject) :
_ title=UnicodeCol(default=””)
_ url=StringCol(default=””)
_ date= DateTimeCol(default=now())
_
_dbfilename=”test.db”
_#カレントディレクトリにtest.dbというdbファイルを作成
_uri= os.path.abspath(dbfilename)
_uri=”sqlite:///”+uri.replace(“¥”,”/”).replace(“:”,”|”)
_ #¥は半角にしてください
_ #WPにバックスラッシュがサニタイズされて表示されないので全角にしてあります
_print “uri=”,uri
_connection = connectionForURI(uri)
_sqlhub.processConnection = connection
_Link.createTable(ifNotExists=True) #テーブル作成
_i=Link(title=u”title”,url=”http://url”) #レコードをインサート
_for i in Link.select(Link.q.date>=today()):
_ print i.title
_ print i.url
_#今日追加したリンクを表示

*datetimeモジュールで今日の日付など
TurboGearsなんかだと、最初から拡張されてるみたいですけど。

_import datetime,time
_def now(delta=0) : #現在時刻
_ d=datetime.datetime(*time.localtime()[:7])
_ if delta :
_ d+=datetime.timedelta(delta)
_ return d
_
_def today(delta=0) : #本日 午前0時
_ d=datetime.datetime(*time.localtime()[:3])
_ if delta :
_ d+=datetime.timedelta(delta)
_ return d

2008-02-11
修正 こちらは誤り
_ if not delta :
_ d-=datetime.timedelta(delta)

正しくは
_ if delta :
_ d+=datetime.timedelta(delta)

えらいはずかしい間違い orz
[/pukiwiki]

コメントを残す

メールアドレスが公開されることはありません。