栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Ubuntu下LuaLaTeX访问PostgreSQL数据库的方法示例

Ubuntu下LuaLaTeX访问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数据库

方法不清楚的话请看我的另一篇博客PostgreSQL之Ubuntu 20.04下的简单安装与相关设置。这里不再赘述。

2. 创建好数据库及相关表格等

在本示例中,创建了测试用的数据库test,并在此数据库中创建了表roster。为测试已在roster表中加入3条数据。

3. 安装latex

为了图省事,直接全部安装吧:

sudo apt install texlive-full
关键组件

前面的准备工作完成后,如果我们马上用lualatex命令来编译包含有连接PostgreSQL数据库代码的latex文档时,会出现以下错误:

从图中可以看出是缺乏luasql.so链接库。下面我们就来安装:

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
--]]

-- CSDN,繁星间漫步,陆巍的博客
-- 定义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
% CSDN,繁星间漫步,陆巍的博客
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等工具来实现也可以,但比较麻烦,这里不建议使用。

建立起与数据库的联系后,实际上可以做的事很多,并不局限于简单的读取数据来显示。与其他数据库的连接方法暂时不介绍,等我用到的时候再说吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号