前回の内容
安価なWeb開発勉強環境の構築①
上記リンク先にて、Raspberry PI のインストールからPython-Flaskを、
ApacheでWeb表示するまでの手順を掲載しています。
今回の内容
Web表示と言っても、データベースが無いと、勉強環境としては…
という事で、Postgresをセットアップして、Pythonで利用したいと思います。
Postgresのセットアップ
sudo apt-get install postgresql (DB導入)
sudo passwd postgres (パスワード設定)
sudo vi /etc/postgresql/15/main/pg_hba.conf (パスワードで利用する為)
- local all all peer
+ local all all md5
sudo vi /etc/postgresql/15/main/postgresql.conf
- #listen_addresses = 'localhost'
+ listen_addresses = 'localhost'
sudo reboot (再起動して設定変更を適用)
su - postgres (ssh実行ユーザ切替)
createuser -P flask1 (DBアクセス用ユーザ登録)
psql
create database flask1; (データベース作成)
alter database flask1 owner to flask1; (データベースの権限付与)
\c flask1 (データベース切り替え)
\connect - flask1 (ユーザ切り替え)
create table t_kbn (
zkbn varchar(5),
znum1 numeric(4,0), znum2 numeric(4,2),
zstdate timestamp, zendate timestamp,
val1 varchar(50), val2 varchar(50), val3 varchar(50),
primary key ( zkbn, znum1 ) );
insert into t_kbn values ('A', 1, 1.2, '2024-9-2 12:34:56', now(), '', null, 'A');
insert into t_kbn values ('B', 1, 1.2, '2024-9-2 12:34:56', now(), '', null, 'A');
insert into t_kbn values ('C', 1, 1.2, '2024-9-2 12:34:56', now(), '', null, 'A');
(※ postgresの作業終了)
source /flask/test1/venv/bin/activate (仮想へ環境の準備)
pip install psycopg2-binary (Postgresコネクター)
cd /flask/test1 (カレントの移動)
mkdir bin (作業フォルダ作成)
vi test1.py (プログラム作成)
import psycopg2
conn = psycopg2.connect( database="flask1", user="flask1",
password="★パスワード★", host="localhost", port="5432")
cur = conn.cursor()
sql = "SELECT * FROM t_kbn;"
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
print(row[0], row[1])
cur.close()
conn.close()
python3 test1.py (プログラム実行)
これで挿入した3件のデータが表示されれば準備OKです。
deactivate (仮想終了)
SQL Alchemy
【SQLに慣れている人が使うメリット】
Postgresから別のDBに変える際、改修が少なく済む可能性があります
(開発標準であったり、プログラムの作り方次第の部分が大きいですが…)
【SQLに慣れてない人が使うメリット】
SQLの御作法を知らなくても、データ操作するプログラムが構築できます
■■ 個人的な見解 ■■
Alchemy の利用により、ORMの抽象化によるオーバーヘッド分、処理速度の劣化がありそうです。複雑なSQLは、DBのQuery機能(View)に頼り、簡単なSQL利用で済む仕様に仕上げれば、大規模開発では、必要な技術と思われます。 (DB変更が容易になるのは大きいです)
source /flask/test1/venv/bin/activate (仮想へ環境の準備)
pip3 install SQLAlchemy (インストール)
cd /flask/test1/bin (カレント変更)
vi db.py (サブプログラム作成)
from sqlalchemy import create_engine, Column, Integer, String, DateTime, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine('postgresql://flask1:パスワード@localhost:5432/flask1')
Base = declarative_base()
Ses = sessionmaker(bind=engine)
class t_kbn(Base):
__tablename__ = 't_kbn'
zkbn = Column(String(5), primary_key=True)
znum1 = Column(Integer, primary_key=True)
znum2 = Column(Float)
zstdate = Column(DateTime)
zendate = Column(DateTime)
val1 = Column(String(50))
val2 = Column(String(50))
val3 = Column(String(50))
vi test2.py (実行プログラム作成、コメントアウト部はWhereのサンプルです)
#from sqlalchemy.sql import operators
import db
with db.Ses() as session:
# kbn = session.query(db.t_kbn).filter(operators.eq(db.t_kbn.zkbn, 'A')).all()
kbn = session.query(db.t_kbn).all()
for row in kbn:
print(row.zkbn, row.znum1)
python3 test2.py (プログラム実行)
これで挿入した3件のデータが表示されれば終了です。
お疲れさまでした~。