mysql - 从Lua表向数据库(Mysql)插入数据

标签 mysql insert lua bigdata lua-table

我正在尝试向 mysql 数据库中的表提供 1 000 000 行之类的内容。 我正在使用 Lua 和函数:

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

对于每一行。 问题是它很长,我确实需要更高的效率。 您还有其他解决方案吗(也许创建 .csv 并使用 mysql 加载它,也许有一个函数可以更有效地在数据库中加载矩阵,...)。使用 Lua 是一种义务,因为我正在使用现有的项目。

感谢您的帮助

最佳答案

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

您也可以使用准备好的查询。它由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

关于mysql - 从Lua表向数据库(Mysql)插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26464678/

相关文章:

c++ - Lua:从 c 导出类时的方法和属性

lua - 我如何在 lua 中 tail -F 一个日志文件(截断感知)?

php - 使用 php 和 mysql 随机横幅显示

PHP mysql创建树状层次结构及其计数

mysql - phpmyadmin 我可以删除哪些用户?

python - 在给定索引列表的情况下将多行插入数据帧的最快方法(python)

c - 为什么 lua_newlib 在这个例子中不起作用?

mysql - 在MySQL中使用子字符串从字符串中过滤特定的单词

asp.net - 在 formview 插入命令后重定向

php - 记录未从 android 插入到 mysql 数据库表