如何在Lua程式設計中使用MySQL?


Lua 提供了不同的庫,可以用來操作 MySQL。最流行的用於在 Lua 中操作 MySQL 的框架是 **LuaSQL**。

LuaSQL 是一個從 Lua 到 DBMS 的簡單介面。它使 Lua 程式能夠:

  • 連線到 **ODBC、ADO、Oracle、MySQL、SQLite、Firebird** 和 **PostgreSQL** 資料庫;
  • 執行任意 SQL 語句;
  • 以逐行遊標的方式檢索結果。

你可以使用以下命令下載 MySQL:

luarocks install luasql-mysql

MySQL 資料庫設定

為了使下面的例子按預期工作,我們需要進行初始資料庫設定。假設條件如下:

  • 你已經安裝並設定了 MySQL,預設使用者為 root,密碼為 **'123456'**。
  • 你已經建立了一個名為 **test** 的資料庫。

匯入 MySQL

假設你的 Lua 實現正確,我們可以使用簡單的 require 語句匯入 sqlite 庫。

mysql = require "luasql.mysql"

變數 **mysql** 將透過引用主 **mysql** 表來提供對函式的訪問。

設定連線

我們可以透過初始化 MySQL 環境,然後為該環境建立連線來設定連線。如下所示。

create environment object
env = assert (mysql.mysql())
connect to data source
con = assert (env:connect("test","root","123456"))

上述連線將連線到現有的 MySQL 檔案,並與新建立的檔案建立連線。

以下程式碼是建立連線,然後遍歷 MySQL 資料庫中存在的表的完整程式碼。

示例

考慮以下程式碼:

-- load driver
local driver = require "luasql.mysql"
create environment object
env = assert (driver.mysql())
connect to data source
con = assert (env:connect("test","root","123456"))
-- reset our table
res = con:execute"DROP TABLE people"
res = assert (con:execute[[
   CREATE TABLE people(
      name varchar(50),
      email varchar(50)
   )
]])
add a few elements list = {
   { name="Mukul Latiyan", email="immukul@protonmail.com", },
   { name="Manoel Joaquim", email="manoel@cafundo.com", },
   { name="Rahul", email="rahul@protonmail.com", },
}
for i, p in pairs (list) do
   res = assert (con:execute(string.format([[
      INSERT INTO people
      VALUES ('%s', '%s')]], p.name, p.email)
   ))
end
-- retrieve a cursor
cur = assert (con:execute"SELECT name, email from people")
-- print all rows, the rows will be indexed by field names
row = cur:fetch ({}, "a")
while row do
   print(string.format("Name: %s, E-mail: %s", row.name, row.email))
   -- reusing the table of results
   row = cur:fetch (row, "a")
end
-- close everything
cur:close() -- already closed because all the result set was consumed
con:close()
env:close()

輸出

Name: Mukul Latiyan, E-mail: immukul@protonmail.com
Name: Manoel Joaquim, E-mail: manoel@cafundo.com
Name: Rahul, E-mail: rahul@protonmail.com

更新於:2021年7月20日

1K+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.