从Lua表格插入数据到数据库(Mysql)

我正在尝试用类似于1,000,000行这样的东西来填充mysql数据库中的一个表格。我正在使用Lua和函数:

conn:execute("INSERT INTO orders (dates, ordertype) VALUES ('"..tab[1][dateIndex]......

对于每一行。问题是它非常长,我真的需要更高效的解决方案。您是否有其他的解决方案(也许创建一个.csv文件并使用mysql加载它,也许有一个可以更有效地将矩阵加载到数据库中的函数,……)。由于我正在使用现有的项目,所以使用Lua是一种义务。

谢谢你的帮助。

点赞
用户2328287
用户2328287

首先,你可以停止在每次插入时提交。

另外,你可以使用准备好的查询。它由 Lua-DBI 和 Lua-ODBC 提供。 我使用的是 ODBC。

local env = odbc.environment()
lcoal db = env:driverconnect{
  Driver = IS_WINDOWS and '{MySQL ODBC 5.2 ANSI Driver}' or 'MySQL';
  db='test';
  uid='root';
};

cnn:set_autocommit(false)
local stmt = db:prepare("INSERT INTO orders (dates, ordertype) VALUES(?,?)")
for i, row in ipairs(tab) do
  stmt:bindstr(row[dateIndex])
  ...
  stmt:execute()
  if i % 1000 == 0 then
    cnn:commit()
  end
end

此外,ODBC提供了变量。可能会更快,因为它们不会每次调用SQLBindParam。

   -- create stmt as preview
   ...
   local dateValue = odbc.date():bind_param(stmt, 1)
   local orderValue = odbc.ulong():bind_param(stmt, 2)

    for i, row in ipairs(tab) do
      dateValue:set(row[1]) -- data is yyyy-mm-dd e.g. 2014-10-14
      orderValue:set(row[2])
      stmt:execute()
      ...
      -- same as preview
2014-10-20 12:57:57