プログラミング

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

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

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

GeoJSONで市町村境界をマージして都道府県境界にしたい(その2)

GeoJSONのPolygonをマージしたい第2回です。 前回、純粋な多角形の統合ではなくて、領域が被らない多角形の統合になるのでグラフ問題として解くことができるという説明をしました。 今回はどうやっ …

どうして私はC言語で仕事をしているのか

みなさんプログラミング言語は学んでますか?今から始めますか? 最初に学ぶべきプログラミング言語ってなんだと思いますか?そうです。C言語です。 C#でもC++でもObjective-Cでもなく、Pure …

GeoJSONで市町村境界をマージして都道府県境界にしたい(その1)

前回の続きで、国土地理院の「国土数値情報」っていうオープンデータで遊んでいます。独立した記事なので前回のは読まなくても良いです。 やりたいこと 国土数値情報で提供されている「行政区域データ」は、市町村 …

no image

ランダムな日本人データを生成するツールをつくった

前置き ダミーの名簿データが作りたい、という需要は稀にあるものです。 住所とか、年齢とか、職業とか、いい感じにランダムなデータが欲しいことがありますよね。 しかし、適当にデータを作ってしまうと、「東京 …