プログラミング

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

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

もくじ1 前置き2 完成!3 用いたデータについて4 中で何をしているのか4.1 基本アイデア4.2 累積確率の計算4.3 高速化の工夫5 おわりに 前置き ダミーの名簿データが作りたい、という需要は …

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

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

no image

C言語のポインタに関する補足説明

前回、C言語のポインタに関する解説記事を書きまして、そこそこの反響を貰うとともにいくつかの指摘を受けました。 前回の記事では幾つか「ウソではないけど真実と違う」記述がありまして、その点を補足としていく …

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

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

no image

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

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