こちらのMySQL版です。
WindowsでNimからMySQLへのアクセスは問題ないだろうと思っていましたが、libmysql.dllを探す旅路がありました。
import db_mysql
let db = open("localhost","user","password","mysql")
# 安定のメッセージ
could not load: (libmysql.dll|libmariadb.dll)
結局のところ、MySQLの何をダウンロードすればよいのか?
https://dev.mysql.com/downloads/ にはいくつかの選択肢がありますが、MySQL Community Server
のZip Archiveをダウンロードします。
ダウンロードしたZipファイルを解凍すると2箇所にDLLが入っています。
-
lib
フォルダにlibmysql.dll
本体 -
bin
フォルダにlibmysql.dll
が参照しているlibssl-1_1_x64.dll
やlibcripto-1_1-x64.dll
などの関連DLL群
思わぬ伏兵
上記のZipを解凍したファイルからDLLを抽出(もしくはパスを通して)して、nimでコンパイルをかけても、libmysql.dllが無いよと言われます。
Dependency Walkerで調べると見つからないDLL(vcruntime140_1.dll)があるようで、このファイルを調べてみるとMicrosoft Visutal C++のラインタイムに含まれているようなので、こちらをインストールします。
解決された依存関係
まとめ的な何か
MySQLもインストーラがあるから簡単にアクセスできるだろうと思っていたのですが、なかなかに面倒でした。
- Community ServerのZipアーカイバをダウンロードし、DLLをかき集める
- VisualStudio2019の再配布可能パッケージをダウンロードし、インストールする
サンプルコード
import db_mysql
const host_port = "localhost:13306"
const user_name = "docker"
const password = "docker"
const database = "test_database"
block:
let db = open(host_port,user_name,password,database)
echo "opened"
defer:
db.close()
echo "closed"
for x in db.fastRows(sql"SELECT database()"):
echo x
実行結果
opened
@["test_database"]
closed