LoginSignup
0
0

More than 3 years have passed since last update.

Flask-SQLAlchemyでモデルを作成した時に作られるテーブル名について

Posted at

Qiita初めての投稿。

KindleのFlask学習本を試していてはまった箇所。

チャプター7-6で、SQLAlchemyを使った以下のコードが出てくる。

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
description = db.Column(db.String(120), index=True, unique=True)
user_image_url = db.Column(db.String(120), index=True, unique=True)
def __repr__(self):
return '<User %r>' % self.username

※ここでデータベースを指定していない場合、クラス名が小文字でテーブル名になり作成されるらしい
本の通りに実行すると、Webアプリとしての動作は成功するのだが、実際にテーブルにデータが作成されているか見てみようと思い、

select * from user;
を実行するが、
postgres
(1 row)
と表示されるだけ。

何故だろうと思ってたら
select * from "user";
とダブルクォーテーションで囲って実行したらちゃんとデータが表示された。

どうやらPostgresqlではテーブル名にuserが予約されていることが原因のようだ。だからSQLAlchemyのクラス名でUserを使ってしまうとこのようになる。ここではUser以外のクラス名を使うべきだったと思う。

0
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
0
0