- Go言語:昨日から本日のドタバタ。
- ある関数でSQLite宣言したら、ポインタ変数で使い回し…。
- SQLite:読みだして失敗続き…VSCodeからは「no such table:xxxx」と指摘され続け…。
- 現在、少ないデータを整理しSQLiteに書き込み、その後読み出せる。その次は?

本日は、RDBのお話です。副題は、人間は慣れた作業でミスする、という内容です。
先頭画像の黄土色の線上、一方はデータベース名、他方はテーブル名を指しています………。
Go言語:昨日から本日のドタバタ。
- 東京証券取引所日報(pdf)をPythonで解析しTSV/CSVにしたファイルの再利用をGo言語で行う
- 昨日までに、SQLiteに単日の0.2%程度のテストデータを書き込めた
- 本日、SQLiteからの読み出しスクリプトを書いたが、何回も読み出しできないエラー続いた
- 本日もCopilotに助けてもらい、結果、SQLiteからの読み出し→ターミナル表示に成功した
これが、およそ昨日、本日の爺の「暗中妄想」でした。
ある関数でSQLite宣言したら、ポインタ変数で使い回し…。
SQLiteも爺が普段使っているMySQLのようなSQL文書いて、作ったり、追記したり、読み出したりします。昨日やっと書き込みまでできました。もうすでにほぼ分かったつもりの爺…しかし、現実はそうはいかない…。
単日の0.2%程度のCSV書き込めたからと言って、複数日の全データを書き込めたわけでもありませぬ。それでも、Microsoft:Copilotに教えてもらったデータベースの設定、爺的には「ヘ~ッ!」というようなものでした。
関数A内で、「db, err := sql.Open("sqlite3", "./データベース名.db")」を書いて、データベース名を決め、テーブル構成も決め、それを実行したら、UPするデータ自体の構造体recordsと、データベース変数dbを関数Bに渡していました。
ここで不思議だったのが、うけとった関数Bでは、func B(records []Record, db *sql.DB) などと書いてたことでした。Go言語ではこういう使い方が普通、とわかっている人には何でもないことでしょうが、渡す側と受け取る側の型が異なって見えるのは爺的には不思議なことでした。ともかく、こういうものなんだそうです…ええ。
じゃあ、dbの型をほかにどう書くか…と言われてもちょっと爺的には何のアイデアも浮かびませぬ…。
関数Bではその次に、「x, err := db.Begin()」と書き、続いてINSERT、Commitなどが並んでいるのでした。
PythonだとMySQLの設定を import文のあとくらいに DB={あれこれ}と設定を書き、関数内から con=sqlのモジュール名.connect(**DB)などと書く方法を、同じくCopilotに教えてもらいました。使い方は少し違うけど、似たように使い回しする方法がコレなんだと思いました。
爺はよくわからないまま、使っております。おわかりのかた、コメントででも優し目にご教示のほど。
SQLite:読みだして失敗続き…VSCodeからは「no such table:xxxx」と指摘され続け…。
読み出し失敗は、VSCodeが言う「no such table:xxxx」その通りの原因でした。爺の思い込みが間違い発見を遅らせました。「暗中妄想」(?)の様相でした。もしかして「暗中暴走」の危険な状態だったやも…。よくわからない暗い夜道のなかで、妄想が先走り、少しでも見える灯りを頼りにしなかった、ということです。
「tableのxxxxは無いよ~」と言われているのですから、それに従い見直せばワカッタコトでしたが、ある程度知っていたつもりのMySQLの延長上…という油断が、データベース名とテーブル名を取り違えていた結果、ドツボにはまってしまったという次第です。慣れた作業では、手の内に入っているという油断も起こり、時に思わぬ失敗に…ということでした。
「no such table:xxxx」を改めて見たら、書き込むときのCREATE文、INSERT文なりと対になる、読み出し時のデータベース名なりテーブル名をチェックするコトに気づきそうなものです。悶々としました。気づいた時には、「あ~またやった」というチカラが抜ける状態でした。
ひとまず、苦悶の後に読み出しができました。ヤレヤレ。
現在、少ないデータを整理しSQLiteに書き込み、その後読み出せる。その次は?
少し作業が前進し、次はSQLiteに単日全量データを書き込めるか、その次にはfor文を使い複数日全量データを書き込めるかなどを試したいと思っています。どのタイミングにfor文を置くか、注意深く検討しなければ…とも。
読み出しができたあと、どのように利用するか、これが一連の区切りになる作業ですが、まだ先か…夢の又夢か…。暗中妄想でありまする。