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以外のクラス名を使うべきだったと思う。