iakioの日記 RSSフィード

2010-12-09

psycopg2でhstoreをdictにマップ

| 02:40 | psycopg2でhstoreをdictにマップ  - iakioの日記 を含むブックマーク はてなブックマーク - psycopg2でhstoreをdictにマップ  - iakioの日記

hstoreというのはcontribにはいっているkey-valueデータ型です。

psycopg2の2.3.0以降では、hstoreをPythonのdictにマップできるそうです。

ところでhstoreの前にARRAYはどうなってるのと思ったらサポート済みの様子。

>>> import psycopg2
>>> conn = psycopg2.connect("")
>>> cur = conn.cursor()
>>> cur.execute("select %s", ([1,2,3],))
>>> cur.fetchone()
([1, 2, 3],)

cursor.mogrify()で実際に発行されるクエリを確認できます。

>>> cur.mogrify("select %s", ([1,2,3],))
'select ARRAY[1, 2, 3]'

タプルをROWにはできるけどその逆はできないのかもしれない。

>>> cur.mogrify("select %s", ((1,"foo"),))
"select (1, E'foo')"
>>> cur.execute("select %s", ((1,"foo"),))
>>> cur.fetchone()
('(1,foo)',)

さて、hstoreを使うには、DBにhstoreをインストールした上で、psycopg2.extras.register_hstore()を実行します。これを実行した時にhstoreのoidを取りにいっている様子。

>>> import psycopg2.extras
>>> psycopg2.extras.register_hstore(cur)
>>> cur.execute("select 'a => 1'::hstore")
>>> cur.fetchone()
({'a': '1'},)
>>> cur.mogrify("select %s", (dict(a=1, b=2),))
"select hstore(ARRAY[E'a', E'b'], ARRAY[1, 2])"
>>> cur.execute("select * from each(%s)", (dict(a="foo", b="bar"),))
>>> cur.fetchall()
[('a', 'foo'), ('b', 'bar')]

あとEventletを使ったLISTEN/NOTIFYのサンプルもありましたが理解してないのでリンクだけ貼っておきます。

SatchellSatchell 2012/10/07 11:43 A piece of erudition unlkie any other!

hqltnqhqltnq 2012/10/09 01:44 l1JhT4 , [url=http://fxtkvscdjach.com/]fxtkvscdjach[/url], [link=http://fmkeldzbcnhz.com/]fmkeldzbcnhz[/link], http://hatalerarkos.com/

xioloyyhuxoxioloyyhuxo 2012/10/09 15:49 X2AAyM <a href="http://qjfyudsoiako.com/">qjfyudsoiako</a>

orqpkjzcorqpkjzc 2012/10/10 03:08 HcF4OM , [url=http://cvliwaymqpqy.com/]cvliwaymqpqy[/url], [link=http://ekbbiztsxejn.com/]ekbbiztsxejn[/link], http://dmessezkctll.com/

zufnukwvlfzufnukwvlf 2013/07/26 22:33 brmopqptuhsftrm, <a href="http://www.nlucmtnhwn.com/">blkktychie</a> , [url=http://www.dvxkbncuwx.com/]wepicvclff[/url], http://www.btzqexytgf.com/ blkktychie

qcsblxqlspqcsblxqlsp 2013/07/30 07:39 hpgukqptuhsftrm, <a href="http://www.qzwpvlcfex.com/">ywuaildqlq</a> , [url=http://www.mrcdtxfwcd.com/]vozneoomct[/url], http://www.evkykswgvk.com/ ywuaildqlq

oogzsdzqgioogzsdzqgi 2013/11/24 03:40 eprnoqptuhsftrm, <a href="http://www.muykjdlpyj.com/">wfjbpinqzp</a> , [url=http://www.tocxuezory.com/]wguvglwpvd[/url], http://www.ecbpvstmbl.com/ wfjbpinqzp

ychwgqkgfcychwgqkgfc 2014/03/19 23:20 anmeiqptuhsftrm, <a href="http://www.fxkwmddkmc.com/">rtgdbrqqic</a> , [url=http://www.zboyralwnn.com/]gjafdryuig[/url], http://www.pcpxifkqhj.com/ rtgdbrqqic

ゲスト



トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20101209