Ubuntu下LuaLaTeX訪問PostgreSQL資料庫的方法示例
阿新 • • 發佈:2021-11-21
在Ubuntu作業系統下,LuaLaTeX通過Lua程式訪問PostgreSQL資料庫的方法介紹。
有時候我們需要在文件中插入來自資料庫的資料資料,在沒有程式幫忙的情況下會很麻煩。好在LuaLaTeX可以呼叫Lua程式,通過Lua程式我們可以訪問資料庫。實際上通過Lua程式可以把我們的文件與各種各樣的計算機系統連線起來。
雖然LuaLaTeX沒有其他LaTeX的漢字支援好,但因為有了Lua程式的強大加持,極大地拓展了LaTeX的功能。對於會程式設計的朋友,在使用LaTeX時,強烈推薦使用LuaLaTeX。
下面列出Ubuntu下,LuaLaTeX訪問PostgreSQL資料庫的方法步驟。實際上很簡單。
環境
- Ubuntu 20.04
- Lua 5.3
- PostgreSQL 12.8
前期準備
1. 安裝好PostgreSQL資料庫
2. 建立好資料庫及相關表格等
在本示例中,建立了測試用的資料庫test,並在此資料庫中建立了表roster。為測試已在roster表中加入3條資料。
3. 安裝latex
為了省事,直接全部安裝吧:
sudo apt install texlive-full
關鍵元件
sudo apt install lua-sql-postgres
安裝之後,並不能直接使用,因為名稱與位置都不在lualatex的預設搜尋內,需要做一些修改。先建立目錄:/usr/local/lib/lua/5.3/,然後執行以下命令:
sudo cp /usr/lib/x86_64-linux-gnu/liblua5.3-sql-postgres.so.2 /usr/local/lib/lua/5.3/luasql.so
這裡要注意,有可能liblua5.3-sql-postgres.so.2這個檔案不在以上這個目錄內,如果不在,請大家自己用find命令查詢。
做好以上工作後,執行lualatex命令就可以通過了。
示例程式碼
1. test1.lua
--[[ @file test1.lua @brief LuaLaTeX訪問PostgreSQL資料庫示例檔案 @copyright MIT @author 陸巍 @version 1.0.0 @date 2021-10-16 --]] -- 部落格園,繁星間漫步,陸巍的部落格 -- 定義visitPG類 VisitPG = { code = "", } function VisitPG:new(o, str) o = o or {} setmetatable(o, self) self.__index = self self.code = str return o end -- @brief 訪問PostgreSQL資料庫 function VisitPG:Visit() local luasql = require 'luasql.postgres' local envv = luasql.postgres() local con = assert (envv:connect('test', 'starry', 'password123', "127.0.0.1", 5432)) local cur = assert(con:execute"SELECT * from roster") local row = cur:fetch({}, "a") local str1 = "" while row do str1 = str1 .. row.id .. "; " .. row.name .. "; " .. row.age .. "; " .. row.id .. "; " .. "\\\\" row = cur:fetch(row, "a") end cur:close() con:close() envv:close() return str1 end --[[ local luasql = require "luasql.postgres" local env = luasql.postgres() local con = assert (env:connect('test', 'starry', 'belighT928s', "127.0.0.1", 5432)) local cur = assert (con:execute"SELECT * from roster") local row = cur:fetch ({}, "a") while row do print(string.format("%20s %-15d %-15d", row.name, row.age, row.id)) row = cur:fetch (row, "a") end cur:close() con:close() env:close() ]]--
程式碼很簡單,不做解釋了,記住最後的掃尾工作。程式碼中最下面註釋掉的內容是用於獨立的lua命令測試。
2. test1.tex
% 部落格園,繁星間漫步,陸巍的部落格
\documentclass{article}
\usepackage{ctex}% 中文支援
\usepackage{geometry}% 用於頁面設定
\usepackage{luacode}% lua支援
% 設定為A4紙,邊距適中模式(參考永中office)
\geometry{
width = 210mm,
height = 297mm,
left = 19.1mm,
right = 19.1mm,
top = 25.4mm,
bottom = 25.4mm
}
\begin{document}
\begin{center}
\huge LuaLaTeX訪問PostgreSQL資料庫示例
\luaexec{
require("test1")
local pg = VisitPG:new(nil, "")
tex.sprint(pg:Visit())
}
\end{center}
\end{document}
編譯後生成的pdf文件如下:
雖然用luarocks等工具來實現也可以,但比較麻煩,這裡不建議使用。
建立起與資料庫的聯絡後,實際上可以做的事很多,並不侷限於簡單的讀取資料來顯示。與其他資料庫的連線方法暫時不介紹,等我用到的時候再說吧。