IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 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文档时,会出现以下错误:
lualatex编译错误
从图中可以看出是缺乏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文档如下:
lualatex访问PostgreSQL数据库示例效果


虽然用luarocks等工具来实现也可以,但比较麻烦,这里不建议使用。

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 11:57:30  更:2021-10-19 11:59:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:42:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码