プログラミング

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

M5StickC Plusの明るさ(M5.Axp.ScreenBreath)、0~100かもしれない

M5StickC Plusで画面の明るさを調整するM5.Axp.ScreenBreath()という関数があります。 日本語リファレンスでは指定値7~12ということになっています。 また、公式ドキュメン …

YouTube Data APIをGoogle Apps Script(GAS)から使おう

YouTubeってAPIから色々な情報を取ることができるんですよ。 APIの情報はリファレンスにまとまってるんですが、APIキーだのOAuth2.0だの、使い始めるまでがまぁまぁ面倒なんですね。 で、 …

【Unity】GPUを使ってパンツを隠すスクリプトができた

かわいいスカートを履きたい!でもパンチラしたくない! それは誰もが抱く夢です。もちろん、3Dモデルだってパンチラしたくないと思っているハズです。 というわけで偉大なる先人がいます。 Unityでパンツ …

SHOWROOMのガチイベをGoogleスプレッドシートでグラフにしよう

もくじ1 まえがき2 みほん3 だいじな注意事項3.1 Google Apps Scriptの制限3.2 SHOWROOMの仕様4 てじゅん4.0.1 1.4.0.2 2.4.0.3 3.4.0.4 …

GeoJSONで市町村境界をマージして都道府県境界にしたい(実践編)

前々回と前回で問題を整理して、ようやく実践編です。 まず実物のリンク貼りましょう。GitHubに上げました。 今回はGo言語で書いてますが、ポイントがいくつかあります。 ちなみに言語としてGoを選択し …