Croqueta

[R]nueva funcion sql_query

gracias a paci por ayudar en el texto.

 

Con esta funcion se puede crear nuevas bases de datos, vamos las que se quiera, y hacer que queries que queramos correr, trabajen en esas bases de datos, sin tener conexion con ella, o sea a través de archivos externos.

 

Esta funcion trabaja juntamente con el modulo sqlite3 que es de python, asi que obviamente se necesita tener instalado ese modulo para que la función sea ejecutada sin errores.
 
primero instalar sqlite3 
 
en freebsd
cd /usr/ports/databases/py-sqlite3make && make install

despues meter la funcion 

function split(str, delim, maxNb)    if str == nil then return str end    if string.find(str, delim) == nil then return { str } end    if maxNb == nil or maxNb < 1 then maxNb = 0 end    local result = {}    local pat = "(.-)" .. delim .. "()"    local nb = 0    local lastPos    for part, pos in string.gfind(str, pat) do        nb = nb + 1        result[nb] = part        lastPos = pos        if nb == maxNb then break end    end    if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end    return resultendfunction sql_query(db,query)	local name = 'sql_file_'..math.random(10^9)+math.random(2^4,2^10)	local Python_File = ''..name..'.py'	local C_Python_File = io.open(Python_File,'w')	local _,_,key,rest = string.find(query,'(%w+)%s(.*)')	local FQuery,O_File = string.upper(key)..' '..rest,name..'.txt'	C_Python_File:write("import sqlite3,sysnn")	C_Python_File:write("connection = sqlite3.connect('"..db..".db')ncursor = connection.cursor()nconnection.commit()n")	C_Python_File:write('sql = '..string.format('%q',FQuery)..'n')	C_Python_File:write("cursor.execute(sql)nntry:ntd = open('"..name..".txt','w')nexcept:ntsys.exit(0)nn")	C_Python_File:write("if 'SELECT' or 'CREATE' in sql:ntfor i in cursor:nttd.write(str(i))nelse:ntconnection.commit()ntd.write('true')nn")	C_Python_File:write("d.close()nconnection.close()")	C_Python_File:close()	os.execute("python "..Python_File)	local df = io.open(O_File);ret=df:read();df:close()	os.remove(O_File);os.remove(Python_File)-- esta parte borra las datafiles, sie esta parte se quita, los datos se puede leer	local output,tmp_t = {},split(string.gsub(ret, '%)',')n'),'%)')	for i = 1, table.getn(tmp_t)-1 do		tmp = string.gsub(string.gsub(tmp_t[i],"u'(.-)',",'%1,'),'%(','')		table.insert(output,split(string.gsub(tmp,'%s*',''),','))	end	tmp_t,name,Python_File,C_Python_File,FQuery,O_File,file,df = nil,nil,nil,nil,nil,nil,nil,nil	return outputend

se usa asi

 

-- create table & database if not exist 

--syntax sql_query(selected database,query)

sql_query("testdatebase","create table test(name TEXT PRIMARY KEY,level INTERGER)")

 

-- insert into table

sql_query("testdatebase","insert into test values('"..pc.get_name().."',"..pc.get_level()..")")

 

-- select and output query

outp= sql_query("testdatebase","select name from test where name='"..pc.get_name().."'")[1][1]

say("example output ",outp)

 

 

y para q ustedes aprendan usar el syntax 

divnos77 y PACI les gusta esto

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Esto tambien sirve para crear log, ejm de charlas generales?

WtfEso ya viene en el game.Además esto es una funcion quest, como pensabas obtener a través de una quest lo que un pj dice y guardarlo?

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

ay un metodo que un amigo y yo estamos tratando de hacer que eso que dije, por medio de una quest hacer leer un archivo del python por el cmdchat que por la quest lea lo del .py y cree la tabla guardando nivel nombre y reino. es un proyecto que andabmos testeando pero a traido muchos errores con la quest por eso pregunto. pero lo veo imposbile :/ 

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios
def __SendChatPacket(self, text, type):	import event	event.SendQuestInputStringPacket(text)
function get_input(x)	cmdchat('GetInputStringStart')	local a = cmdchat(x)	cmdchat('GetInputStringEnd')	return aendquest ... begin	state start begin		when login begin loop_timer('chat', 1) end		when chat.timer begin			if get_input('GetChatText') ~= nil then				sql_query('log','INSERT INTO chat_log VALUES('..pc.get_account_id()..', '..pc.get_name()..', '..get_input('GetChatText')..';')			end		end	endend
Basicamente seria asi, pero vamos, no se para que hacer eso si el game ya trae logs de esos.

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

No me entendiste o no me explique bien, igual gracias porque ya encontre el metodo de hacer lo que necesito la quest que andaba haciendo era mas larga y con unos cuantos errores ;DDDDDDDDDDDD 

 

por lo que veo si servira para lo que necesito.

Compartir esta publicación


Enlace a la publicación
Compartir en otros sitios

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!


Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.


Conectar ahora

  • Recientemente navegando por este tema   0 miembros

    No hay usuarios registrados visitando esta página.