読者です 読者をやめる 読者になる 読者になる

Python3でSQLiteを扱おうとしたときにハマったこと

ツール 環境整備 開発

python3からSQLliteを扱おうとした時にハマったのでメモ

環境

SQLite3のインストール

$ sudo apt install sqlite3 libsqlite3-dev

動作確認

ファイル構成

root@ubuntu:~/CHUNITHM$ tree
.
|-- chunithm.db
`-- sqlite3.py

0 directories, 2 files
#sqlite3.py
#!/usr/bin/env python3

import sqlite3
con = sqlite3.connect("/root/CHUNITHM/chunithm.db")
c = con.cursor()
c.execute("select * from Music")
r = c.fetchall()
print(r[0])

chunithm.dbの構造

chunithm.dbの中身

実行してみよう!

root@ubuntu:~/CHUNITHM$ python3 sqlite3.py
Traceback (most recent call last):
  File "sqlite3.py", line 3, in module
    import sqlite3
  File "/root/CHUNITHM/sqlite3.py", line 4, in module
    con = sqlite3.connect("/root/CHUNITHM/chunithm.db")
AttributeError: module 'sqlite3' has no attribute 'connect'

AttributeError: module 'sqlite3' has no attribute 'connect'・・・なんだ?

Pythonを嫌いになりかけてたとき神リプが送られてきた

神様🙏🙏🙏

つまりファイル名がsqlite3.pyだったのがまずかったよう

自分のファイルをImportしにいってたからエラーが発生してたよう

ファイル名を別に変えて

root@ubuntu:~/CHUNITHM$ tree
.
|-- chunithm.db
`-- chunithm.py

0 directories, 2 files
root@ubuntu:~/CHUNITHM$ python3 chunithm.py
(3, 'B.B.K.K.B.K.K.', 'img/d739ba44da6798a0.jpg', None, 11.8)

できた!!!

ほんとしょうもないミスでお恥ずかしいばかりです・・・

@eiryplus様@rikibon_様ほんとにありがとうございました!

UbuntuのApacheでFlaskを用いてPython3でWebアプリケーションを作る

環境整備 開発

今PHPで作ってるCHUNITHM Rate CalculatorをPython3で作ってみようとしたときの備忘録

環境

  • Ubuntu-Server:16.04(64bit)
  • Python:3.5.2

前準備

$ sudo apt update
$ sudo apt upgrade

Flaskのインストール

$ sudo apt install python3-dev python3-pip
$ sudo pip3 install Flask

Flaskのインストール中に

locale.Error: unsupported locale setting

こんなエラーが出たら、

$ export LC_ALL=C

を打ってもう一度実行してみる

Apache2とApacheでPython3を使えるようにするmodのインストール

$ sudo apt install apache2
$ sudo apt install libapache2-mod-wsgi-py3  

ファイル構成

root@Ubuntu:/var/www$ tree -l 
.                               
└── flask                    
    ├── flask_script.py    
    └── flask_app.wsgi           
                             
1 directories, 2 files          

アプリケーションの作成

#flask_script.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

.wsgiファイルの作成

flask-mod_wsgi

#flask_app.wsgi
import os,sys

sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from flask_script import app as application

Apacheの設定

$ sudo vim /etc/apache2/sites-available/flask.conf

Flaskの設定ファイルつくる

#flask.conf
<VirtualHost *:80>
    ServerName localhost

    WSGIDaemonProcess flask_app user=www-data group=www-data threads=5
    WSGIScriptAlias / /var/www/flask/flask_app.wsgi

    <Directory /var/www/flask>
        WSGIProcessGroup flask_app
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

このように設定する。 この時アプリケーションのディレクトリ以下が、www-dataがオーナーになるように所有者を変えておく。

$ sudo chown -R www-data:www-data /var/www/flask/
$ sudo ln -s /etc/apache2/sites-available/flask.conf /etc/apache2/sites-enabled/flask.conf   # Apacheに読み込んでもらうために、シンボリックリンクを作成する。
$ sudo rm /etc/apache2/sites-enabled/000-default.conf   # デフォルトの設定ファイルを読み込まれないようにする

Apacheを再起動

$ sudo apachectl restart

もし、再起動の時に

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using localhost Set the 'ServerName' directive globally to suppress this message

というエラーが発生したら、

$ sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
$ sudo a2enconf fqdn

と打ち込んで、もう一度再起動する

$ sudo apachectl restart

エラーが出なかったら、http://localhostにアクセスしてみてHello World!

と表示されれば成功

ファイルを変更した際はApacheを再起動しないといけないよう?