luasql-mysql – Acceso a bases de datos Mariadb desde script en Lua

Lo primero es instalar las dependencias:
 

# apt-get install mariadb-server lua5.1 luarocks libmariadb-dev git
# apt-get install mariadb-client default-libmysqlclient-dev

 
Luego comprobar el directorio en el que estará mysql.h (en debian 9 lo he probado yo y puede diferir en tu sistema y posiblemente tengas que usar find para encontrar el archivo y directorio).
 

# dpkg -L libmariadb-dev | grep "mysql.h"

Nos mostrará algo así como: /usr/include/mariadb/mysql.h (en debian 9). Entonces creamos directorios para que luarocks pille bien el tema:
 

# mkdir /usr/include/mariadb/include

 

# cp -pRv /usr/include/mariadb/* /usr/include/mariadb/include/

 
Instalamos luasql-mysql así:
 

luarocks install luasql-mysql MYSQL_DIR=/usr/include/mariadb/

 
Mostrará si todo va bien algo así:
 

 
Más información en: https://keplerproject.github.io/luasql/
 
Comprobar que funciona creando un archivo llamado por ejemplo test.lua y metiendo:
 

require("luasql.mysql")

 
Al ejecutarlo con lua5.1 test.lua no tendría que soltar fallos y eso quiere decir que la cosa ha ido bien.
 
Ahora a probar un poco. Crearemos una base de datos llamada lua con un usuario que tiene permisos de todo llamado userlua en localhost con password passwordlua.
 
Para hacer eso tenemos que acceder mediante el cliente de mariadb desde root así:
 

# mysql -u root

 
Si le pusisteis password al user root de mariadb entonces así:

 
# mysql -u root -p

 
Una vez dentro:
 

create database lua;
grant all on lua.* to 'userlua'@'localhost' identified by 'passwordlua';
use lua;
CREATE TABLE usuarias ( id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(30) NOT NULL, apellido VARCHAR(30) NOT NULL);
insert into usuarias (nombre,apellido) values ('benito','camelas');
insert into usuarias (nombre,apellido) values ('juanito','garcia'); 

 
Si ahora como user interpretases este test.lua no saldría nada:
 

require("luasql.mysql")

luasql = require "luasql.mysql"
env = assert (luasql.mysql())
con = assert (env:connect("lua","userlua","passwordlua","localhost"))
cur = assert (con:execute("SELECT * from `usuarias`"))

 
Pero si con este codigo:
 

require("luasql.mysql")

luasql = require "luasql.mysql"
env = assert (luasql.mysql())
con = assert (env:connect("lua","userlua","passwordlua","localhost"))
cur = assert (con:execute("SELECT * from `usuarias`"))

row = cur:fetch ({}, "a")
while row do
  print(string.format("nombre: %s - apellido: %s", row.nombre, row.apellido))
  row = cur:fetch (row, "a")
end

 

 
Ejecutado como lua5.1 main.lua nos saca los datos. Vistos y probados los ejemplos ya no tendriamos que tener muchos problemas para trabajar insertando datos y sacando datos.

Deja un comentario