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将列名映射到它们的值.
pg_conn.exec('insert into some_table (some_column) values ($1)', [ realname ])
请使用占位符而不是插值,不需要像1999年的PHP程序员那样派对.
您还可以使用prepare
和exec_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 ])
# ...
结合它们可以完成工作:
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] 举报,一经查实,本站将立刻删除。