プログラミング

ロリポップで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

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

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

no image

[python]Windows環境でsubprocessするときは文字コードに気をつけて

pythonは内部の文字コードと実行環境の文字コードが色々絡み合っていて、いろんなところで悪さをする。 特にWindows環境だと、内部はUTF-8で動いているのに実行環境はShift-JIS(正確に …

no image

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

もくじ1 まえおき2 Hello, Worldより簡単に2.1 サンプルコード2.2 変数の置き場所2.3 変数が入っているところを見てみる3 C言語とメモリ3.1 変数cの「まわり」を見てみる3.2 …

no image

BlueskyのAPI制限が厳しくなったぞ

以前、Blueskyのbotを作る記事を書いたんですが、そのbotがいつの間にかひどくエラーを吐くようになっていました。 で、調べたところ、API制限が厳しくなっていると。 詳しく言うと、Rate L …

国土地理院の地図データをUnityで読みたい(願望)

なんかgoogleのAdSense通ったんで有益な情報載せないとなって。 もくじ1 国土地理院のオープンデータ2 GeoJsonを読み込もう3 Unityで処理しよう3.1 JsonUtilityの挫 …