【问题标题】:Need help using os.execute to perform a mysql insert需要帮助使用 os.execute 执行 mysql 插入
【发布时间】:2014-05-03 16:44:16
【问题描述】:

我正在尝试获取一个 lua 脚本来执行 MySQL 更新。

但是,与命令的 -e "" 部分一起使用的双引号使 lua(和我!)感到困惑。我已经尝试过多种引号组合,如下所示:

os.execute(""mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, RecordMilliseconds, data1, data2, data3) values ('111', '222', '333', '444', '555')""")

stdin:1: ')' expected near 'mysql'

os.execute("mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, RecordMilliseconds, data1, data2, data3) values ('111', '222', '333', '444', '555')" ")

stdin:1: ')' expected near 'insert'

任何想法我可以使用什么语法来允许 os.execute 使用这个 mysql 命令?

更新 - 好的,我可以使用 Egor 的 os.execute[[...]] 语法,但我现在需要能够用变量名替换这些示例值 '111'、'222' 等。当然,当我这样做时,它们可能会因为引号而被逐字解释。例如:

os.execute[[mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, RecordMilliseconds, data1, data2, data3) values (value1, value2, value3, value4, value5)"]]

这会导致错误:ERROR 1054 (42S22) at line 1: Unknown column 'my_date' in 'field list'

希望有一些方法可以从这个 os.execute[[mysql..."variable"]] 结构中引用变量名?也许使用|变量|语法?

显然在普通的 linux shell 中,这是比较容易实现的……

mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, data1) values ($my_timestamp, $value1)"

提前感谢您提供任何急需的帮助!

【问题讨论】:

  • 实际上 - 看起来我可以使用 -e '' 作为 -e "" 的替代品。这对我来说在 os.execute("") 命令中工作正常。还是谢谢...
  • os.execute[[mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, RecordMilliseconds, data1, data2, data3) values ('111', '222', '333', '444', '555')"]]
  • 谢谢 Egor - 实际上,我还有一个问题。我需要用变量名替换这些示例值“111”、“222”等。当然,当我这样做时,它们可能会因为引号而被逐字解释。例如:
  • os.execute[[mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "插入表(RecordDate, RecordMilliseconds, data1, data2, data3) 值 (value1, '222', '333', '444', '555')"]]
  • 在第 1 行导致 ERROR 1054 (42S22):'field list' 中的未知列 'my_date'

标签: mysql lua


【解决方案1】:

好的 - 终于通过使用字符串连接解决了这个问题:

my_command = 'mysql --host=1.1.1.1 --port=3308 --user=username --password=password db -e "insert into table (RecordDate, RecordMilliseconds, data1, data2, data3) values ('..variable1..','..variable2..',')"  etc.

那我就用

os.execute(my_command)

虽然可能有更优雅的方式来做这件事,但这项工作做得很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    相关资源
    最近更新 更多