プログラミング

ロリポップでSQLite3を使うときはpythonでpysqlite3-binaryだ

投稿日:

このブログはロリポップで運用しています。
公式にSQLite3の使用も許可されていて、モジュール叩けば動くんですがいかんせんバージョンが低い。
確認するとバージョンが3.7.17。なかなかに古いです。

そのせいで、WITH句やウィンドウ関数を使おうとすると未サポートでエラーを吐きます。
それも具体的に教えてくれればいいんですが、とにかく「未知の構文です」みたいなエラーになるので、手元の環境では動くのにサーバーにアップロードしたら動かなくなる、みたいな状態に陥ります。

そこで、SQLite3のバージョンを上げたくなるんですが、何分レンタルサーバーなので勝手が効かない。
と思いきや、AWS Lambdaで同じ現象にハマった先人がいて、既に解決策が提示されてます。(AWS LambdaのSQLiteバージョンが古い問題の解消

なのでこのブログの通りに作業すれば万事解決、というわけですが、いくつか注意点が。

そもそもpython向けの記載だ

ロリポップのサーバーでなにか作る時に、python使おうという人は中々いない気がします。ふつうはphpでは。
しかしphpでSQLite3のバージョンをいじる方法がわからないので、やりたいならpythonで書くしかない。
pythonスクリプトを動かすのも少しノウハウ要るので、以下ページを参考に動かすと良いです。

ロリポップでPythonのCGIスクリプトが動かない場合の対処法

また、Content-Typeヘッダを自分で吐かないとエラーになるのでコレも注意。

print('Content-Type: text/html; charset=utf-8\n')

とかをどこかに埋め込むと良いです。

バージョンの合ったモジュールを手元で展開する必要がある。

参照元のページでは

$ pip install pysqlite3-binary -t ./package_for_layer

とか書いてさらっと流してあるんですが、
これには幾つか省略がありまして。

  • 手元の環境のPythonのバージョン合わせないとだめ
  • 手元の環境がLinuxじゃないとだめ

というわけで、Windows端末上にpython入れて動かしていると割とハマります。
どこからかLinuxの環境もらってきてpythonのバージョン変える必要があります。
自分はWSLベースでやりました。以下が参考になります。

wslでのpython仮想環境作成

そういう紆余曲折あった結果、なんとかロリポップ上でpysqlite3-binaryが動くようになったので、とてもよかったなという話でした。

-プログラミング

執筆者:

関連記事

no image

[C言語]スペースを大量に入れるとバグが直るコードを書いてみた

↓こういうツイートがバズっていたので、実際に組んでみた。 修士の頃、授業の課題でC言語書いてる時にどうしても謎のエラーが出て困っていた。それを見たSE経験(金融系)がある社会人大学院生の同期の女性が「 …

no image

Unityでメッシュをさわるノウハウ

ヒマなので覚書。ウラを取っていない経験則なので話半分で読んでください。 あと、3Dの基本概念とUnity固有の話の区別が付いていないのでごめんなさい。 もくじ Meshクラスの基本 Unityでポリゴ …

no image

“API”をなるべく分かりやすく説明してみる

“API”という言葉が一般にもよく使われ始めています。 しかし、非エンジニアにとっては馴染みのない言葉で、しかも謎の英略語なので、一部の人々からは「APIがなくなった」(=AP …

no image

例え話をしないC言語のポインタの説明

もくじ まえおき 巷では「プログラマーになりたい人に初学者にとって、ポインタという考え方がわけわかめ」という話がよくあります。 そこでいろいろな人が「ポインタは住所だ」とか「変数がハコで」とか手を変え …

no image

暦の面倒臭さと和暦の元号カレンダーを作った話

前書き japanese-era-calendarというのを作った。 これは和暦の元号カレンダーで、過去すべての元号と西暦の対応表として使える。連続した値としてUNIX timeや修正ユリウス日も表記 …