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