環境
- Ubuntu 16.04 LTS
- Mysql5.7自体はapt-getでインストール済み
- パスワードなしで接続できるようにしてあります
- crenv
- 0.23.0
Crystal用にしたこと
-
$ shards init
でshard.yml
を用意 -
以下を追記
dependencies: mysql: github: crystal-lang/crystal-mysql
$ shards install crystal-mysql
で使用可能になるshard.yml, shard.lock
のある階層で$ crystal hoge.cr
を実行
MySQLの準備
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table langs (id int, name varchar(32));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into langs (id, name) values (1, "Ruby"),(2, "Python"),(3, "Java");
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from langs;
+------+--------+
| id | name |
+------+--------+
| 1 | Ruby |
| 2 | Python |
| 3 | Java |
+------+--------+
3 rows in set (0.00 sec)
コード
- テーブルの参照
mysql_s1.cr
require "mysql"
DB.open "mysql://root@localhost/test" do |db|
db.query "select id, name from langs" do |rs|
puts "#{rs.column_name(0)}\t#{rs.column_name(1)}"
rs.each do
puts "#{rs.read(Int32)}\t#{rs.read(String)}"
end
end
end
$ crystal cr/mysql_s1.cr
id name
1 Ruby
2 Python
3 Java
- データの挿入
mysql_s2.cr
require "mysql"
DB.open "mysql://root@localhost/test" do |db|
db.exec "insert into langs values (?, ?)", 4, "Crystal"
db.query "select id, name from langs" do |rs|
puts "#{rs.column_name(0)}\t#{rs.column_name(1)}"
rs.each do
puts "#{rs.read(Int32)}\t#{rs.read(String)}"
end
end
end
$ crystal cr/mysql_s2.cr
id name
1 Ruby
2 Python
3 Java
4 Crystal
- データの更新
mysql_s3.cr
require "mysql"
DB.open "mysql://root@localhost/test" do |db|
db.exec "update langs set name = ? where id = ? ", "Whitespace", 4
db.query "select id, name from langs" do |rs|
puts "#{rs.column_name(0)}\t#{rs.column_name(1)}"
rs.each do
puts "#{rs.read(Int32)}\t#{rs.read(String)}"
end
end
end
$ crystal cr/mysql_s3.cr
id name
1 Ruby
2 Python
3 Java
4 Whitespace
- データの削除
mysql_s4.cr
require "mysql"
DB.open "mysql://root@localhost/test" do |db|
db.exec "delete from langs where id = ? ", 4
db.query "select id, name from langs" do |rs|
puts "#{rs.column_name(0)}\t#{rs.column_name(1)}"
rs.each do
puts "#{rs.read(Int32)}\t#{rs.read(String)}"
end
end
end
$ crystal cr/mysql_s4.cr
id name
1 Ruby
2 Python
3 Java
参考にしたサイト
- MySQLのrootパスワードの変更 - Qiita のコメント
- GitHub - crystal-lang/crystal-mysql: MySQL connector for Crystal
- RubyでMySQLを操作する - Qiita
追記(2019/10/15)
DBにパスワードがある場合は、@kazto さんにコメントで指摘していただいたように
DB.open "mysql://root:password@localhost:port/test" do |db|
# 処理
end
とすれば良いです。