Jump to content

[R]nueva funcion sql_query


Croqueta

Mensajes recomendados

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 

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

Enlace para comentar
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 :/ 

Enlace para comentar
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.
Enlace para comentar
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.

Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...