Lua 使用 LuaSQL 访问数据库

Lua 有可以访问数据库。虽然 Lua 既没有官方的访问数据库的模块,也没有像 Python 输出 DB-API 规范。但 Lua 社区开发了 LuaSQL。

LuaSQL 是 Lua 语言访问数据库最好的模块之一,它是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL

本章接下来的内容主要讲解使用 LuaSQL 访问 MySQL 数据库

LuaSQL 安装

LuaRocks 安装

LuaSQL 可以使用 LuaRocks 安装我们需要的数据库驱动

LuaRocks 是 Lua 语言的包/模块管理器,利用它可以方便的安装和删除 Lua 社区开发的各种有用的类库

Linux LuaRocks 编译安装方法

[root@localhost ~]# cd ~
[root@localhost ~]# wget http://luarocks.org/releases/luarocks-2.4.3.tar.gz
[root@localhost ~]# tar zxpf luarocks-2.4.3.tar.gz
[root@localhost luarocks-2.4.3]# cd luarocks-2.4.3
[root@localhost luarocks-2.4.3]# ./configure; sudo make bootstrap # 编译安装
[root@localhost luarocks-2.4.3]# sudo luarocks install luasocket 
[root@localhost luarocks-2.4.3]# $ lua
Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio

Window 下安装 LuaRocks

Windows 下安装 LuaRocks 可以查看这边文章

https://github.com/keplerproject/luarocks/wiki/Installation-instructions-for-Windows

使用 LuaRocks 安装不同数据库驱动

luarocks install luasql-sqlite3     # sqlite 驱动
luarocks install luasql-postgres    # postgres 驱动 
luarocks install luasql-mysql       # mysql 驱动
luarocks install luasql-odbc        # odbc  驱动

使用编译源码方式安装 LuaSQL

我们也可以使用源码方式安装 LuaSQL。

LuaSQL Github 源码地址为: https://github.com/keplerproject/luasql

Lua 使用 LuaSQL 连接 MySQL 数据库

假设我们要连接的 MySQL 服务器连接信息如下

HOST :     127.0.0.1  
DATABASE:  test  
USER:      root  
PASSWD:    ''  
PORT:      3306 

test 数据库中有一张表,表中有数据如下

MariaDB [test]> select * from comps;
+----+--------------+-----------------------+-----------+------------+
| id | name         | website               | city      | ceo        |
+----+--------------+-----------------------+-----------+------------+
|  1 | 腾讯         | http://www.qq.com     | 深圳      | 马化腾     |
|  2 | 阿里巴巴     | http://www.taobao.com | 杭州      | 马云       |
|  3 | 小米         | http://www.mi.com     | 北京      | 雷军       |
|  4 | 百度         | http://www.baidu.com  | 北京      | 李彦宏     |
|  5 | 网易         | http://www.163.com    | 广州      | 丁磊       |
|  6 | Amazon       | https://www.z.cn      | 西雅图    | Jeff Bezos |
+----+--------------+-----------------------+-----------+------------+
6 rows in set (0.00 sec)

你可以通过以下语句来建表

DROP TABLE IF EXISTS `comps`;
CREATE TABLE `comps` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `website` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `city` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `ceo` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `comps` VALUES (1,'腾讯','http://www.qq.com','深圳','马化腾'),(2,'阿里巴巴','http://www.taobao.com','杭州','马云'),(3,'小米','http://www.mi.com','北京','雷军'),(4,'百度','http://www.baidu.com','北京','李彦宏'),(5,'网易','http://www.163.com','广州','丁磊');

main.lua 文件内容

-- !/usr/bin/lua
-- -*- encoding:utf-8 -*-
-- filename: main.lua
-- author: 简单教程(www.twle.cn)
-- Copyright © 2015-2065 www.twle.cn. All rights reserved.


driver = require "luasql.mysql"

--创建环境对象
env = assert(driver.mysql())

--连接数据库
--conn = env:connect("数据库名","用户名","密码","IP地址",端口)
conn = env:connect("twle","root","","127.0.0.1",3306)

--设置数据库的编码格式
conn:execute"SET NAMES UTF8"

--执行数据库操作
cur = conn:execute("select * from comps")

row = cur:fetch({},"a")

--文件对象的创建
file = io.open("comps.txt","w+");

while row do
    var = string.format("%d %s\n", row.id, row.name)

    print(var)

    file:write(var)

    row = cur:fetch(row,"a")
end


file:close()  --关闭文件对象
conn:close()  --关闭数据库连接
env:close()   --关闭数据库环境

运行以上 Lua 脚本,输出结果如下

[root@localhost lua]# lua main.lua
1 腾讯

2 阿里巴巴

3 小米

4 百度

5 网易

6 Amazon

打开文件 comps.txt 内容如下

[root@localhost lua]# comps.txt
1 腾讯
2 阿里巴巴
3 小米
4 百度
5 网易
6 Amazon
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.