スクリプトのお勉強

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 Django REST Framework(REST API)の作成

1.はじめに 今回は、pythonの「Django」というWebアプリケーションフレームワークを使用し、REST APIを作成します。作成するREST APIは、これから作るであろう、Nuxt.jsか …

暗号モードによる処理時間の違いを測定してみた

はじめに 前回、AESで暗号化する実装をしてみた際、知らない暗号モードが増えたなと思いました。 なので、どの暗号モードを使用すべきかの、判定材料の一つとして、代表的な暗号モードの処理速度を簡単に計って …

Pythonのmock.patchを使ってみる

単体テストによく使われるMockライブラリ Pythonで単体テストを行う際、実際のライブラリを使用してしまうと、実際の環境を用意しなければいけません。 例えば、データベースのテストをする際に、データ …

CentOS7をRocky Linux 9に移行する

このVMのOSをCentOS7にした関係上、そろそろupdateする必要があります。そもそもCentOS7を選択した理由は、仕事で使用するからでした。 で、仕事ではRocky Linux 9なので、こ …

Markdown to HTML(grip)

1.はじめに 最近の文書はほとんどMarkdownで書くのですが、それをHTMLに変換する方法を調べました。 ただし、私がMarkdownと思っている文法は「github-flavored-markd …

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