当前位置: 首页 > MySQL数据库

Ruby如何使用Mysql2连接操作MySQL

时间:2026-01-25 16:19:40
Ruby操作MySQL

使用mysql2连接mysql并操作mysql。

geminstallmysql2
连接mysql

建立连接:

require'mysql2'conn=Mysql2::Client.new({host:'192.168.200.73',username:'root',password:'P@ssword1!'})

接受的连接选项包括:

Mysql2::Client.new(:host,:username,:password,:port,:database,:socket='/path/to/mysql.sock',:flags=REMEMBER_OPTIONS|LONG_PASSWORD|LONG_FLAG|TRANSACTIONS|PROTOCOL_41|SECURE_CONNECTION|MULTI_STATEMENTS,:encoding='utf8',:read_timeout=seconds,:write_timeout=seconds,:connect_timeout=seconds,:connect_attrs={:program_name=>$PROGRAM_NAME,...},:reconnect=true/false,:local_infile=true/false,:secure_auth=true/false,:ssl_mode=:disabled/:preferred/:required/:verify_ca/:verify_identity,:default_file='$HOME/.my.cnf',#=>从文件读取连接信息:default_group='my.cfgsection',#=>选择.my.cnf中的section:default_auth='authentication_windows_client',:init_command=>SQL_Statement#=>主要用于设置本次连接时的某些变量)

连接建立后就可以操作数据库了,比如执行SQL语句:

conn.query('createdatabsemytest')conn.select_db('mytest')#conn.query('usemytest')conn.query('createtabletb(namevarchar(1024),ageint)')conn.query<<-SQLinsertintotbvalues('junmajinlong',23),('woniu',25),('fairy',26)SQL

如果测试和mysql的连接是否断开,可执行ping():

conn.ping

如果连接未断开,ping()返回true,如果连接已断开但已启用auto-reconnect,则ping()会尝试依次reconnect,连接成功则返回true,否则报错。如果连接已断开,且未启用auto-reconnect,则报错。

query()查询和结果处理

query()用于执行任何允许的SQL语句,比如执行查询语句。

查询结果可使用each进行迭代,迭代时传递查询到的每一行记录,可使用hash索引的方式(默认以hash类型保存每一行)查询某个字段的内容:

conn.query("showdatabases").eachdo|row|pprowend=begin{"Database"=>"information_schema"}{"Database"=>"mysql"}{"Database"=>"mytest"}{"Database"=>"performance_schema"}{"Database"=>"sys"}=endconn.query("select*frommytest.tb").eachdo|row|pprowpprow["name"]end=begin{"name"=>"junmajinlong","age"=>23}"junmajinlong"{"name"=>"woniu","age"=>25}"woniu"{"name"=>"fairy","age"=>26}"fairy"=end

可见,查询结果中,每一行数据默认以hash格式保存。

实际上,对于增删改的SQL语句,query()的返回值为nil,对于查询类的语句,其返回值以Mysql2::Result对象返回

conn.query("createtablemytest.t1(idint)")#=>nilres=conn.query("select*frommytest.tb")pres

结果:

#<Mysql2::Result:0x00007fffe833a230@query_options={:as=>:hash,:async=>false,:cast_booleans=>false,:symbolize_keys=>false,:database_timezone=>:local,:application_timezone=>nil,:cache_rows=>true,:connect_flags=>2148540933,:cast=>true,:default_file=>nil,:default_group=>nil,:host=>"192.168.200.73",:username=>"root",:password=>"P@ssword1!"},@server_flags={:no_good_index_used=>false,:no_index_used=>true,:query_was_slow=>false}>

query()各查询选项的含义以及默认的查询选项参见下文。先了解两个:

  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素