Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

sql

psycopg2で画像データを読み書きする

psycopg2で画像データを読み書きする方法です。 実際のところ 画像データの格納にはbytea型を使います。 PostgreSQLのbytea型はmemorybuffer型を返すので、ちゃんとbytes関数なりで整形しないといけません。 import psycopg2 DSN = "dbname=postgres user=sh…

psycopg2でデータをINSERTする

前回に引き続き、psycopg2でデータをINSERTする方法です。 実際のところ imageというbytea型のbyte_dataカラムを持っているテーブルに対し、バイナリデータを叩き込む方法は以下の通り。 import psycopg2 DSN = "dbname=postgres user=shuzo_kino" SQL3 = "I…

psycopg2を使ってPostgreSQLにあるデータを読み出す

psycopg2を使ってPostgreSQLにあるデータを読み出す 実際のところ 以下のSQL文を叩くケースを考えます。 固定の時間値を返す。 imageテーブルからとりあえず一個引っ張り出す せっかくwith節を使う事ができるので使ってみます。 import psycopg2 DSN = "dbna…

psqlも-cオプションでSQL文を直接叩きつけることができる。

sql

psqlも-cオプションでSQL文を直接叩きつけることができます。 実際のところ 基本的な使い方 postgresというDBに対し、"select byte_data from image where id = 0;"というSQL文を叩きつけたい場合は以下の通り。 $ psql postgres -c "select byte_data from …

postgresをbrewで入れ直し

sql

postgresをbrewで入れ直し 実際のところ $ brew cleanup postgresql $ brew remove postgresql $ brew install postgresqlDBを新造 $ rm -rf /usr/local/var/postgres $ initdb /usr/local/var/postgres -E utf8$ pg_ctl -D /usr/local/var/postgres -l logf…

pythonで使えるORMapper「peewee」

今回はpythonで使えるORMapperの「peewee」を試してみます。 実際のところ 今回は既存のDBを流用するパターン。 from peewee import * from playhouse.sqlite_ext import SqliteExtData db = SqliteExtDatabase('blogtest.sqlite') db.connect() で、このpee…

bottleとsqlite3を連携させて簡単なメモ表示ツール その2:POSTする

前回の続きで、今回はPOST動作です。 実際のところ まず、子パッケージのpostとrequestを突っ込みます。 from bottle import get, post, request, run, template, static_file, error getの後にpostを追記。 @post('/blog') def postBlog(): body = request.…

bottleとsqlite3を連携させて簡単なメモ表示ツール その1:存在するデータの表示

bottleとsqlite3を連携させて簡単なメモ表示ツールをつくる方法です。 第一回目は存在するDBからデータの表示する方法です。 実際のところ あらかじめ、blogpost.sqliteというDBを作った上でtableも用意しておきます。 /blogにアクセスしたら、最新の記事 /b…

SQLiteでFIRSTやLASTみたいな事を実現する

sql

SQLiteには、FIRSTやLASTに相当する構文はありません。 内部的に印加されるrowidというデータをソートして、LIMITで一個だけ採ってきます。 select rowid,body,date from blog order by rowid desc limit 1; /* 5|it is a fine today.|2016-09-15 */ 実際の…

SQLiteの時間型……はないが関数はある。

sql

SQLiteには、明確な時間型というのがありません。 かわりに、文字列やユリウス暦、UNIX時間を数値化できる各種関数をもってサポートしています。 SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Da…

SQLite3の全文検索機能"FTS"をつかってみる その5:一致箇所の強調

sql

SQLite FTSの不思議な機能の一つにThe Snippet Functionというのがあります。 一致した箇所を強調してくれる奴です。 実際のところ デフォではbタグで囲ってくれます。 HTMLやXMLなんかの時には便利? SELECT snippet(eb2) FROM eb2 WHERE body MATCH 'all';…

SQLite3の全文検索機能"FTS"をつかってみる その4:論理条件

sql

この手のもののご多分に漏れず、論理条件を突っ込むことが可能です。 実際のところ eb2に含まれているサンプルは前回の記事と同様 OR SELECT docid,body FROM eb2 WHERE body MATCH 'to OR have'; /* 1|All your base are belong to us. 36|The truck have s…

SQLite3の全文検索機能"FTS"をつかってみる その3:NEAR節

sql

SQLiteのFTSにおけるMATCHでは、NEARという構文があります。 コレを使うと、近くにこの言葉があるものだけマッチという、 実際のところ たとえば、eb2(内容はその1とほぼ同様)にある"to"を含んだ文章を探すのは以下の通り。 SELECT docid,body FROM eb2 W…

SQLite3の全文検索機能"FTS"をつかってみる その2:既存のテーブルとの連携

sql

FTS編その2、既存のテーブルをひも付けする方法です。 実際のところ 導入 まずは元になるtableを捏造。 CREATE TABLE t1(name, value); INSERT INTO t1 VALUES("samplename", 123); INSERT INTO t1 VALUES("shuzo", 456); INSERT INTO t1 VALUES("taro", 78…

SQLite3の全文検索機能"FTS"をつかってみる その1:導入

sql

SQLite3には全文検索用の機能FTS3*1があります。 今回は導入と簡単な使い方。 下準備 全文検索対応カラムを作成します。 フツーのtableではなく、virtual tableていうものを使います。 既存のDBをコレに変換する方法については調査中……。 CREATE VIRTUAL TAB…

postgresでテーブルのカラムを調べるには「 \d table」

sql

mysqlだと SHOW COLUMN でテーブルのカラムを確認できます。 が、PostgreSQLだと無効なコマンドです。 確認するには、「 \d table」と何やら魔界めいたコマンドで mydb=# \d weather Table "public.weather" Column | Type | Modifiers ---------+----------…

postgresでユーザ削除するときはdropuser

sql

postgresでユーザ削除するときはdropuserというコマンドを使います。 実際のところ 以下のような状況だったとします。 勝手がわからない頃にお試しで作ったユーザが2つ残ってます。 postgres=# \du List of roles Role name | Attributes | Member of -----…

SQLのwhere節で使うワイルドカードは"%"

sql

SQLのwhere節で使うワイルドカードは"%"です。 Postgresには、検証用に世界の国名が記載されたSQLファイルが用意されている - Bye Bye Moore で使ったファイルから、Jaを含む国名と国番号を検索するクエリは以下のとおりです。 # select name, country_id fr…

MySQLをデータベースを指定して起動する

sql

毎回毎回起動してからロードしなくとも $ mysql -u root -p -D dbnameとすれば、DBを指定して起動できます。

新しいカラムを追加して、一括してデータを突っ込む

前回の記事にて引っかかった 「新しいカラムを追加して、一括してデータを突っ込む」の手順です。 データベースは素人なので、結構危ない橋を渡ってる気がします。今回は、 usersテーブルにroleカラムを追加 id = 1は"admin"、それ以外は"user"というデータ…