微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 如何将数组插入数据库表?

我有以下Ruby代码

 94   def open_connection(info)
 95     self.log "opening #{info.inspect}"
 96     db = MysqL.init
 97     db.options(MysqL::SET_CHARSET_NAME, 'utf8')
 98     db.real_connect(info.host, info.user, info.password, info.dbname, info.port)
 99     db.query("SET NAMES utf8")
100 »···res = db.query("SELECT realname FROM profiles")
101 
102 »···conn = PGconn.connect("localhost", 5432, '', '', "dbname", "user", "pwd")

如何获取res变量并循环遍历它以将其插入到Postgres数据库中?

解决方法:

MySQL查询方法为您提供了一个MysqL :: Result实例,因此您可以使用each将每一行作为数组:

res = db.query('select realname from profiles')
res.each do |a|
    # a is an array of strings
    realname = a.first
    # ...
end

如果结果集中有更多列,那么each_hash可能更容易使用,它使用Hash调用块,该Hash将列名映射到它们的值.

要将数据插入Postgresql,请使用exec

pg_conn.exec('insert into some_table (some_column) values ($1)', [ realname ])

请使用占位符而不是插值,不需要像1999年的PHP程序员那样派对.

您还可以使用prepareexec_prepared

pg_conn.prepare('ins', 'insert into some_table (some_column) values ($1)')
pg_conn.exec_prepared('ins', [ realname1 ])
pg_conn.exec_prepared('ins', [ realname2 ])
# ...

如果您要一遍又一遍地执行相同的sql,那么准备方法会更好.

结合它们可以完成工作:

res = db.query('select realname from profiles')
pg_conn.prepare('ins', 'insert into some_table (some_column) values ($1)')
res.each { |a| pg_conn.exec_prepared('ins', a) }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐