1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

安価なWeb開発勉強環境の構築②

Last updated at Posted at 2024-09-14

前回の内容
安価な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 (パスワードで利用する為)

pg_hba.conf
- local all all peer
+ local all all md5

sudo vi /etc/postgresql/15/main/postgresql.conf

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 (ユーザ切り替え)

テスト用Table作成
 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 ) );
3件のテストデータ挿入
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 (プログラム作成)

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 (サブプログラム作成)

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のサンプルです)

test2.py
#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件のデータが表示されれば終了です。
お疲れさまでした~。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?