スクリプトのお勉強

yoyo-migrationsを使ってみる

投稿日:2020年11月14日 更新日:

勉強用に、PythonでPostgresqlを制御しようと思います。

その前に、Postgresqlの設定と、マイグレーションをしようかと思います。
まずyoyo-migrationsを使用します。

yoyo-migrationsとは

yoyo-migrationsとは、データベースのスキーマを管理するツールです。
他にもありますが、なんとなくシンプルそうだったので採用しました。

PostgreSQLのインストール

使用しているディストリビューションはubuntu 20.04です。

公式を見ながらインストールしました。

$ sudo apt-get install curl ca-certificates gnupg
$ sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt install postgresql-common
$ sudo sh /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
$ sudo apt update
$ sudo apt install postgresql-13
### 起動と起動確認
$ sudo systemctl start postgresql
$ sudo systemctl status postgresql
  postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: enabled)
     Active: active (exited) since Sat 2020-11-14 10:19:15 JST; 5s ago
    Process: 102819 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 102819 (code=exited, status=0/SUCCESS)

11月 14 10:19:15 ubuntu systemd[1]: Starting PostgreSQL RDBMS...
11月 14 10:19:15 ubuntu systemd[1]: Finished PostgreSQL RDBMS.

ユーザ作成とデータベース作成と

これらまでは手動で行います。

データベースと、ユーザ名は以下を設定します。

データベース名: testdb
ユーザ名: testuser
パスワード: testuserp
データベースの文字コード(エンコーディング): UTF-8

以下でtestdbをtestuserでログインできるようにします。

$ sudo su - postgres
$ vi /etc/postgres/13/pg_hba.conf
local   testdb          testuser                                md5
$ psql
> create role testuser with LOGIN PASSWORD 'testuserp';
> create database testdb owner postgres encoding 'UTF8';
> GRANT ALL PRIVILEGES ON DATABASE testdb TO testuser;

yoyo-migrationsの設定

やっと本題です。

テーブルは以下を作成します。

create table addr (
  id SERIAL,
  name text,
  addr text,
  ipaddr inet,
  create_time timestamp with time zone,
  update_time timestamp with time zone,
);

本稿のソース

ここに設定したソースを置いてあります。

インストール及び設定

yoyoの設定ファイルは以下の通りです。

[DEFAULT]

sources = %(here)s/migrations
database = postgresql://testuser:testuserp@localhost/testdb
verbosity = 3
batch_mode = on
prefix = testp_

以下のように起動します。

$ pipenv install yoyo-migrations
$ pipenv run yoyo -c ./migration/yoyo.ini list
STATUS    ID                SOURCE
--------  ----------------  ------------------------------------------------------------------------
U         0001_create_addr  /home/tanino/script-plactice/yoyo-migrations-sample/migration/migrations
$ pipenv run yoyo -c ./migration/yoyo.ini apply
INFO:yoyo.migrations:Applying 0001_create_addr
INFO:yoyo.migrations: - applying step 0
DEBUG:yoyo.migrations: - executing b'create table addr (id SERIAL, name text, addr text, ipaddr inet, create_time timestamp with time zone, update_time timestamp with time zone);'
INFO:yoyo.migrations:Marking 0001_create_addr applied

確認

出来たかどうか確認するのは以下です。

postgres@ubuntu:~$ psql -d testdb
testdb=# \d addr
                                        テーブル"public.addr"
     列      |          タイプ          | 照合順序 | Null 値を許容 |            デフォルト
-------------+--------------------------+----------+---------------+----------------------------------
 id          | integer                  |          | not null      | nextval('addr_id_seq'::regclass)
 name        | text                     |          |               |
 addr        | text                     |          |               |
 ipaddr      | inet                     |          |               |
 create_time | timestamp with time zone |          |               |
 update_time | timestamp with time zone |          |               |

終わりに

yoyo-migrations自体はうまくいきました。
次はfastapi + sqlalchemyでAPI(CRUDアプリケーションを作ってみたいと思います。

-スクリプトのお勉強

執筆者:

関連記事

PythonでAESを使用して暗号/復号する

1.つづき Pythonで、PKCS#12の公開鍵で暗号、秘密鍵で復号するプログラムの続きです。 今回はAESで暗号化/復号を行い、通信しながらRSA暗号/復号,AES暗号/復号を組み合わせたいと思い …

Thunderbird プラグインの開発(プラグインでの実現方法)

前回 Thunderbird プラグインの WebExtension版開発方法を調べたので、開発したいプラグインと、WebExtension版プラグインでの実現方法について書いていきます。 開発するプ …

seaborn + Pandas + Python によるグラフ描画(その2: グラフ描画編)

前回の続き 前回の続きです。 折れ線グラフ まずは折れ線グラフを描画したいと思います。 描画するのは以下です。 運用商品(4つ)日経平均 以下で起動します。引数(dataset-2017-201908 …

VMware player(workstation) から WSL2に乗り換える

いままで、VMware player(今のVMWare Workstation Player)上で、作って確認していたけど、いちいち起動するのがだるいです。 ついでにやたらとリソースを使用するので、こ …

Selenium + Python によるアップロードアプリの動作確認プログラム作成

私の周りでは、なぜかSeleniumが流行っている模様です。 私自身は、Webアプリ的なのも作ってますが、あまり使ってなかったので、使ってみようと思います。 前回作成した、Djangoのupload_ …

google オプトアウト Click here to opt-out.