LINUX.ORG.RU

lua+sqlite3

 ,


0

1

Поставил lua-sql-sqlite3 из репозитория, но при попытке загрузить модуль получаю ошибку:

> require "sqlite3"
error loading module 'sqlite3' from file '/usr/lib/i386-linux-gnu/lua/5.1/sqlite3.so':
	/usr/lib/i386-linux-gnu/lua/5.1/sqlite3.so: undefined symbol: luaopen_sqlite3
stack traceback:
	[C]: ?
	[C]: in function 'require'
	stdin:1: in main chunk
	[C]: ?

Lua5.1; sqlite3.7.13; lua-sql-sqlite3 2.3.0-1

Может кто сталкивался?

Deleted

Список файлов пакета lua-sql-sqlite3 в wheezy для архитектуры i386

/usr/lib/i386-linux-gnu/liblua5.1-sql-sqlite3.so.2
/usr/lib/i386-linux-gnu/liblua5.1-sql-sqlite3.so.2.0.0
/usr/lib/i386-linux-gnu/liblua5.2-sql-sqlite3.so.2
/usr/lib/i386-linux-gnu/liblua5.2-sql-sqlite3.so.2.0.0
/usr/lib/i386-linux-gnu/lua/5.1/luasql/sqlite3.so
/usr/lib/i386-linux-gnu/lua/5.2/luasql/sqlite3.so
/usr/share/doc/lua-sql-sqlite3/changelog.Debian.gz
/usr/share/doc/lua-sql-sqlite3/copyright

anonymous ()
Ответ на: комментарий от anonymous

/usr/lib/i386-linux-gnu/lua/5.1/luasql/sqlite3.so

это симлинк на

/usr/lib/i386-linux-gnu/liblua5.1-sql-sqlite3.so.2

В моем случае:

lrwxrwxrwx 1 root root 32 Сен 19 12:45 /usr/lib/i386-linux-gnu/lua/5.1/sqlite3.so -> ../../liblua5.1-sql-sqlite3.so.2

Deleted ()
Ответ на: комментарий от anonymous
> require "luasql.sqlite3"
> env=luasql.sqlite3()
stdin:1: attempt to index global 'luasql' (a nil value)
stack traceback:
	stdin:1: in main chunk
	[C]: ?

Deleted ()
Ответ на: комментарий от anonymous

Пробовал, ругается на одно и тоже:

stdin:1: attempt to index global 'luasql' (a nil value)
stack traceback:
	stdin:1: in main chunk
	[C]: ?

Deleted ()
Ответ на: комментарий от Deleted

а так?

assert (package.loadlib("sqlite3.dll", "luaopen_luasql_sqlite3")) ()

-- create environment object
env = assert (sqlite3())

-- connect to data source
con = assert (env:connect ("databasename.sqlite3", "username", "password"))
...

anonymous ()
Ответ на: комментарий от anonymous
assert (package.loadlib("/usr/lib/i386-linux-gnu/lua/5.1/sqlite3.so", "luaopen_luasql_sqlite3")) ()
> env = assert (sqlite3())
stdin:1: attempt to call global 'sqlite3' (a nil value)
stack traceback:
	stdin:1: in main chunk
	[C]: ?
Deleted ()
Ответ на: комментарий от Deleted
local m = require "luasql.sqlite3"
for k,v in pairs(m) do print(k,v) end

Символ в сошке есть, надо понять чо он возвращает. Не все опены ставят глобалы, этот может просто вернуть либу.

arturpub ★★ ()
Ответ на: комментарий от arturpub

Если в интерактиве то без первого локал или заверни все в ду енд — иначе локал м исчезнет во второй строке.

arturpub ★★ ()
Ответ на: комментарий от arturpub
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> do
>> local m = require "luasql.sqlite3"
>> for k,v in pairs(m) do print(k,v) end
>> end
sqlite3	function: 0x8f53a30
_VERSION	LuaSQL 2.3.0
_DESCRIPTION	LuaSQL is a simple interface from Lua to a DBMS
_COPYRIGHT	Copyright (C) 2003-2012 Kepler Project
Deleted ()
Ответ на: комментарий от Deleted

Модуль глобалы не ставит, просто возвращает таблицу, в которой есть функция по ключу sqlite3. Что она делает уже тебе видней, я с этим модулем не знаком. Наверное это аналог sqlite3_open(). Читай в доке к модулю как использовать.

arturpub ★★ ()
Ответ на: комментарий от Deleted
$ ./run.lua
Name: Jose das Couves, E-mail: jose@couves.com
Name: Manoel Joaquim, E-mail: manoel.joaquim@cafundo.com
Name: Maria das Dores, E-mail: maria@dores.com
$ cat run.lua
#!/usr/bin/lua

-- load driver
local m = require "luasql.sqlite3"
-- create environment object
env = assert (m.sqlite3())
-- connect to data source
con = assert (env:connect("luasql-test.sql"))
-- reset our table
res = con:execute"DROP TABLE people"
res = assert (con:execute[[
  CREATE TABLE people(
    name  varchar(50),
    email varchar(50)
  )
]])
-- add a few elements
list = {
  { name="Jose das Couves", email="jose@couves.com", },
  { name="Manoel Joaquim", email="manoel.joaquim@cafundo.com", },
  { name="Maria das Dores", email="maria@dores.com", },
}
for i, p in pairs (list) do
  res = assert (con:execute(string.format([[
    INSERT INTO people
    VALUES ('%s', '%s')]], p.name, p.email)
  ))
end
-- retrieve a cursor
cur = assert (con:execute"SELECT name, email from people")
-- print all rows, the rows will be indexed by field names
row = cur:fetch ({}, "a")
while row do
  print(string.format("Name: %s, E-mail: %s", row.name, row.email))
  -- reusing the table of results
  row = cur:fetch (row, "a")
end
-- close everything
cur:close()
con:close()
env:close()
anonymous ()
Ответ на: комментарий от arturpub

Читай в доке к модулю как использовать.

Делал по доку, получал то что написано выше.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.