MySQLサーバを使ってMySQL 2 GEMを使用します
MySQL 2 GEMを使用して、RailsのMySQLサーバーと対話するサービスを作成するシリーズの第2部です.あなたは最初の部分を読むことができます.
要件
外部のMySQLサーバと接続する [ X ]サービス []基本的なクエリを実行します. [準備]文 []トランザクション を実行します [] Joinクエリを実行する 前のブログでは、我々はサービスを作成し、また、
このブログで
このブログでは次のように学びます.は、挿入質問 を実行します更新クエリ を実行する
挿入クエリを実行する
挿入クエリは、データベース内の新しいレコードを作成するために使用されます.
コード
解説属性のキー部分をフォーマットすることでカラム名を取得する 属性の値部分を書式設定することにより、値を挿入する 挿入クエリ を構築して返す
以下はは、挿入操作 のために直接使うことができる問合せを得るために、
に挿入する
実際に を得るためには、値
現在、
更新クエリを実行する
更新クエリは、データベース内の既存のレコードを更新するために使用されます.
コード
解説我々が挿入質問と同じ
現在、
最終コード
パート1からチュートリアルに従っている場合は、次のようにします.
イメージクレジット:Kelvin YangのUnsplashによるカバーイメージ
要件
外部のMySQLサーバと接続する
select
操作を実行するメソッドを追加しました.今日、MySQLサーバーへの挿入および更新操作をmysql 2 gemを使用して実行するための追加メソッドを追加します.このブログで
このブログでは次のように学びます.
挿入クエリを実行する
挿入クエリは、データベース内の新しいレコードを作成するために使用されます.
コード
def insert(attributes)
query = format_insert_query(attributes)
perform_mysql_operation do
mysql_client.query(query)
puts 'Record inserted!'
end
end
private
def format_insert_query(attributes)
raise 'Attributes cannot be empty' if attributes.empty?
columns = attributes.keys.join(',')
values = attributes.values.collect! { |value| "'#{value}'" }.join(',')
"INSERT INTO #{table} (#{columns}) VALUES (#{values})"
end
解説
format_insert_query
はattributes
法からinsert
ハッシュパラメータを取っています.メソッドの内部で起こっています.以下は
insert
メソッドの中で起こっています.format_insert_query
を呼び出しますに挿入する
実際に
{first_name: 'John', last_name: 'Doe'}
は24679142のパラメタとして受け取られます.そして、それはフォーマットされた質問attributes
に送られますformat_insert_query
、format_insert_query
の内部のcolumns
を持ちます;"first_name,last_name"
ハッシュのキー部分、attributes
はvalues
を持ちます"'John','Doe'"
ハッシュの値部分.最後に、attributes
がtable
ならば、それはusers
を返します"INSERT INTO users (first_name,last_name) VALUES ('John','Doe')"
のメソッドは、クエリをサーバーに送信し、新しいレコードがデータベースに挿入されます.更新クエリを実行する
更新クエリは、データベース内の既存のレコードを更新するために使用されます.
コード
def update(id, attributes)
query = format_update_query(id, attributes)
perform_mysql_operation do
mysql_client.query(query)
puts 'Record Updated!'
end
end
private
def format_update_query(id, attributes)
raise 'Attributes cannot be empty' if attributes.empty?
formatted_attributes = attributes.map { |key, value| "#{key}='#{value}'" }.join(',')
"UPDATE #{table} SET #{formatted_attributes} WHERE #{primary_column}=#{id}"
end
解説
insert
への変更はupdate
までですまた、insert
をパラメータとしています.id
私たちはデータベースで更新する既存のレコードを知ることができます.これは、クエリのフォーマットとデータベース内の更新を取得している概念は、クエリの変更だけでid
と同じです.insert
はformat_update_query
のそれとわずかな違いがありますそれはformat_insert_query
を異なって変換しています、下記の実例でそれを見ましょう.attributes
とid=1
を提供しているならば、attributes
はformat_update_query
を返します"UPDATE users SET first_name='John',last_name='Doe' WHERE id=1"
のメソッドは、サーバーにクエリを送信し、データベースにupdate
でレコードを更新します.最終コード
パート1からチュートリアルに従っている場合は、次のようにします.
require 'mysql2'
module MySqlServer
module Database
class Connect
attr_reader :mysql_client, :table, :primary_column
def initialize(table, primary_column)
@table = table
@primary_column = primary_column
end
def fetch_all
perform_mysql_operation do
result = mysql_client.query("SELECT * from #{table}")
puts result.entries
end
end
def fetch_one(id)
perform_mysql_operation do
result = mysql_client.query("SELECT * from #{table} WHERE #{primary_column}=#{id}")
puts result.entries
end
end
def insert(attributes)
query = format_insert_query(attributes)
perform_mysql_operation do
mysql_client.query(query)
puts 'Record inserted!'
end
end
def update(id, attributes)
query = format_update_query(id, attributes)
perform_mysql_operation do
mysql_client.query(query)
puts 'Record Updated!'
end
end
private
def connect_to_db
host = ENV['MYSQL_SERVER_IP']
database = ENV['MYSQL_DB_NAME']
username = ENV['MYSQL_USERNAME']
password = ENV['MYSQL_PASSWORD']
Mysql2::Client.new(username: username, password: password, database: database, host: host)
end
def perform_mysql_operation
raise ArgumentError, 'No block was given' unless block_given?
begin
@mysql_client = connect_to_db
yield
rescue StandardError => e
raise e
ensure
mysql_client&.close
end
end
def format_insert_query(attributes)
raise 'Attributes cannot be empty' if attributes.empty?
columns = attributes.keys.join(',')
values = attributes.values.collect! { |value| "'#{value}'" }.join(',')
"INSERT INTO #{table} (#{columns}) VALUES (#{values})"
end
def format_update_query(id, attributes)
raise 'Attributes cannot be empty' if attributes.empty?
formatted_attributes = attributes.map { |key, value| "#{key}='#{value}'" }.join(',')
"UPDATE #{table} SET #{formatted_attributes} WHERE #{primary_column}=#{id}"
end
end
end
end
この後、MySQL 2 GEMを使って外部のMySQLサーバで基本的なクエリを実行できます.来週、SQLインジェクション問題を回避するのに役立つプリペアドステートメントでクエリを実行する方法を学びます.イメージクレジット:Kelvin YangのUnsplashによるカバーイメージ
Reference
この問題について(MySQLサーバを使ってMySQL 2 GEMを使用します), 我々は、より多くの情報をここで見つけました https://dev.to/truemark/interact-with-mysql-server-using-mysql2-gem-part-2-insert-and-update-operations-4bj8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol