1. テーブルの作成
ターミナルにコマンド「psql データベース名」を入力し対象のデータベースを開いて、別で書いておいた create 文のコピペで処理可能。最後に「;」をつけるのを忘れない様に気をつけてください。
下記の例では「yt_trend_channel」というテーブルを作りました。
sample_db=# create table yt_trend_channel ( channel_id varchar(30), view_count varchar(20), join_date varchar(20), country varchar(20), channel_name varchar(100), thumbnail_url varchar(50), subscriber_count varchar(20), data_date varchar(8) );
2. csv ファイルをテーブルに copy (insert)
csv ファイルを テーブルに copy します。
psql を起動する前に対象のファイルのディレクトリへ cd しておくと、単純にファイル名を渡すだけで済むのでわかりやすいです。
下記の例では先ほど create した yt_trend_channel テーブルに、別で用意した yt_trend_channel.csv という csv ファイルのデータを copy (insert) しています。
sample_db=# \copy yt_trend_channel from 'yt_trend_channel.csv' with csv COPY 4259 sample_db=#
全部で 4259 件のレコードが copy されました。
select クエリで確認します。
sample_db=# select * from yt_trend_channel; channel_id | view_count | join_date | country | channel_name | thumbnail_url | subscriber_count | data_date --------------------------+-------------+------------+----------------+---------------------------------------------------------------------+----------------------------------------------------+------------------+----------- UC9OvLVXb-okaVtoK9V8Biwg | 103499474 | 2018/05/23 | 日本 | ABEMA バラエティ【公式】 | https://yt3.ggpht.com/ytc/AAUvwnjBKC3y2KycvPfvHdn1 | 19.9万人 | 20210104 UCZZ0UGjWsRdM8_5bsqtxYaQ | 190130764 | 2015/10/02 | 日本 | RIZIN FIGHTING FEDERATION | https://yt3.ggpht.com/ytc/AAUvwnjDj0e-hS0um-ZKG1Tc | 35万人 | 20210104 UCaminwG9MTO4sLYeC3s6udA | 3201321432 | 2016/03/18 | 日本 | ヒカル(Hikaru) | https://yt3.ggpht.com/ytc/AAUvwnhBYwfz6DycI4xBURsZ | 428万人 | 20210104 UCPn_e-7LD7SbzIBxdU_XBnQ | 21113326 | 2020/07/30 | 日本 | あーたろチャンネル | https://yt3.ggpht.com/ytc/AAUvwngZDvNAYRF_qgPfOgy9 | 18.7万人 | 20210104 UC4-TMrb7Mm4KnYx1VsUgcJA | 135489838 | 2012/08/04 | 日本 | あいり | https://yt3.ggpht.com/ytc/AAUvwngy1VncfSpEQkWmZXYK | 26.8万人 | 20210104
ちなみに MySQL の場合は下記の様な感じ
load data local infile 'yt_trend_channel.csv' into table yt_trend_channel fields terminated by ',' enclosed by '"' ;
3. (ついでに Django)inspectdb でモデル情報を確認
実はそもそも Django で使うテーブルなので「python manage.py inspectdb テーブル名」でモデル情報を確認してみます。
% python manage.py inspectdb yt_trend_channel # This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # * Make sure each ForeignKey has `on_delete` set to the desired behavior. # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # Feel free to rename the models, but don't rename db_table values or field names. from django.db import models class YtTrendChannel(models.Model): channel_id = models.CharField(max_length=30, blank=True, null=True) view_count = models.CharField(max_length=20, blank=True, null=True) join_date = models.CharField(max_length=20, blank=True, null=True) country = models.CharField(max_length=20, blank=True, null=True) channel_name = models.CharField(max_length=100, blank=True, null=True) thumbnail_url = models.CharField(max_length=50, blank=True, null=True) subscriber_count = models.CharField(max_length=20, blank=True, null=True) data_date = models.CharField(max_length=8, blank=True, null=True) class Meta: managed = False db_table = 'yt_trend_channel' %
class 文を models.py にコピーすると Django でモデルとして使える様になります。その際に 1 つ「primary_key=True」のフィールドを持つ必要がありますので確認してください。