Lua 数据库访问

本文主要为大家介绍 Lua 数据库的操作库:LuaSQL。他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL。

本文为大家介绍MySQL的数据库连接。

LuaSQL 可以使用 LuaRocks 来安装可以根据需要安装你需要的数据库驱动。

LuaRocks 安装方法:

$ wget http://luarocks.org/releases/luarocks-2.2.1.tar.gz
$ tar zxpf luarocks-2.2.1.tar.gz
$ cd luarocks-2.2.1
$ ./configure; sudo make bootstrap
$ sudo luarocks install luasocket
$ lua
Lua 5.3.0 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "socket"

Window 下安装 LuaRocks:https://github.com/keplerproject/luarocks/wiki/Installation-instructions-for-Windows

安装不同数据库驱动:

luarocks install luasql-sqlite3
luarocks install luasql-postgres
luarocks install luasql-mysql
luarocks install luasql-sqlite
luarocks install luasql-odbc

你也可以使用源码安装方式,Lua Github 源码地址:https://github.com/keplerproject/luasql

Lua 连接MySql 数据库:

require "luasql.mysql"

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

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

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

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

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

--文件对象的创建
file = io.open("role.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()   --关闭数据库环境

 

1 篇笔记

  1.    四重人格

      xm_***f@qq.com

    5.2 版本之后,require 不再定义全局变量,需要保存其返回值。

    require "luasql.mysql"

    需要写成:

    luasql = require "luasql.mysql"
    

=====================以上是原文,下面写一点自己的实战中的收获==========================

1.安装luaforwindows应该包含了安装LuaSQL,实战中只安装了前者没有安装后者,可以成功操作数据库

2.引入库的时候使用require "luasql.mysql" 或者使用luasql = require "luasql.mysql"都正确(发现自己的环境是lua5.1,原文说5.2以上的必须更改,实际情况待测)

3.row = cur:fetch({},"a") 中的a是什么意思?没有领悟

4.上面代码中row.id和row.name中id和name代表实际数据库中的字段名字

5.执行事务:

事务是确保数据一致性的机制。事务应该具有以下四个特性:

  •     原子性:事务要么都完成或都没有任何变化发生。
  •     一致性:事务必须启动一个一致的状态,让系统处于一致的状态。
  •     隔离:一个事务的中间结果是不是当前事务外可见。
  •     持久性:当一个事务被提交,这个效果是持久的,即使在系统出现故障。

事务开始START TRANSACTION;和commit或rollback语句结束。
开始事务

为了启动一个事务,我们需要执行在Lua下面执行语句,假设conn是一个开放的MySQL连接。

代码如下:

conn:execute([[START TRANSACTION;]])

回滚事务

我们需要做执行下面的语句来回滚执行开始事务后所做的更改。

代码如下:

conn:execute([[ROLLBACK;]])

提交事务

我们需要做执行以下语句提交执行开始事务后所做的更改。

代码如下:

conn:execute([[COMMIT;]])

我们已经在上面知道关于MySQL和下节介绍基本的SQL操作。请记住事务,但sqlite3不会再解释了,但相同的语句在sqlite3也能正常工作。

 

实测代码如下(正常运行):

require "luasql.mysql"
--luasql = require "luasql.mysql"

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

--连接数据库
conn = env:connect("msdb","root","root","192.168.0.108",3306)

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

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

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

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

while row do
    var = string.format("%s %s %d %s\n", row.actiontime, row.user, row.type, row.info) -- 遍历字段的值

    print(var)

    file:write(var)

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


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

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值