ホーム > プログラム小技 > LuaでDB操作

LuaでDB操作

2009 年 4 月 17 日

Luaでも当然DBにアクセスできます。

LuaSQLというライブラリを使用します。

インストール方法は、Ubuntu8.04であればSynapticからliblua5.1-sql-mysql-2というパッケージを

インストールするだけです。

使い方も簡単です。

MySQLサーバに接続するプログラムを書いてみましょう。

require "luasql.mysql"

dbname = "test"
dbhost = "localhost"
dbuser = "test"
dbpass = ""

env = assert(luasql.mysql())
con = assert(env:connect(dbname, dbuser, dbpass, dbhost))
res = con:execute("DROP TABLE IF EXISTS members")
res = con:execute([[
 CREATE TABLE members(
 id int not null primary key auto_increment,
 name varchar(50) not null,
 regist_dt datetime not null
 )
]])

members = {
 { name="user1" },
 { name="us'er2" }
}

for i, r in ipairs(members) do
 print("name:" .. r.name)
 res = con:execute(string.format([[
 INSERT INTO members(name, regist_dt)
 VALUES('%s', NOW())]], string.gsub(r.name, "'", "''")))
end

cur = con:execute("SELECT id, name, regist_dt from members")
row = cur:fetch({}, "a")
while row do
 print(string.format("#%03d %s (%s)", row.id, row.name, row.regist_dt))
 row = cur:fetch({}, "a")
end

cur:close()
con:close()
env:close()

perlやphpなどのプログラムとほとんど変わりません。
32行や35行で使われているfetch関数の引数は、フェッチ結果を代入するテーブルを指定します。
通常は空のテーブルを指定します。
第2引数は取得した行を配列で取得する(“n”)か、カラム名のハッシュで取得する(“a”)かの指定となります。
引数は2つとも省略可能です。この時は新規にテーブル作成され、配列モード(“n”)で取得されます。

admin プログラム小技 , , ,