質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

解決済

1回答

4105閲覧

flask, sqlalchemyを使ったDB操作について

mireiri

総合スコア2

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2020/09/12 00:28

前提・実現したいこと

Python Flask postgreSQLを使ってDBを操作したい。

発生している問題・エラーメッセージ

書籍を参考にしながらWebアプリを作成しておりましたが、SQLAlchemyで詰まってしまいました。
以下、吐かれているメッセージです。。

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) リレーション"hoge"は存在しません

testというDBは作成しておりますが、テーブルは作成しておりません。

該当のソースコード

from flask import Flask, request, render_template from flask_sqlalchemy import SQLAlchemy from werkzeug.utils import secure_filename app = Flask(__name__) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://postgres:xxxxxxxx@localhost/test" db = SQLAlchemy(app) 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 @app.route('/') def index(): users = User.query.all() return render_template('index.html', users=users) @app.route('/form') def form(): return render_template('form.html') @app.route('/register', methods=['POST']) def register(): if request.form['username'] and request.form['description'] and request.files['image']: f = request.files['image'] filepath = 'dbtest/static/' + secure_filename(f.filename) f.save(filepath) ※ここまでは処理できています。 newUser = User(username=request.form['username'], description=request.form['description'], user_image_url=filepath) db.session.add(newUser) db.session.commit() return render_template('result.html', username=request.form['username'], description=request.form['description']) else: return render_template('error.html') @app.cli.command('initdb') def initdb_command(): db.create_all() if __name__ == '__main__': app.run(debug=True)

質問

flask-alchemyでDBを操作できるものと解釈していたのですが、
先に操作したいDBとテーブルをpostgresで定義してからpython側で操作しなければ
ならないのでしょうか??

初歩的な質問で申し訳ございませんがご教示ください。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2020/09/12 03:48

createtableの処理自体は書いてあるようですけど、その処理実行してますか?書いてあるだけで未実行という事はありませんか?
mireiri

2020/09/12 07:03

しておりません。。createtableはpostgresで定義するコマンドだと理解しておりますが、DBだけ作ってtableは未作成です。
guest

回答1

0

ベストアンサー

QuickStartに書かれている通り下記のようにテーブル作る処理を実行しないと作られないと思いますが・・・

>>> from yourapplication import db >>> db.create_all()

質問に記載のプログラムだと下記が該当しますが、

@app.cli.command('initdb') def initdb_command(): db.create_all()

この部分ではコマンドとして用意しているだけなので実行しないとcreate tableされません

投稿2020/09/12 07:48

hentaiman

総合スコア6389

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mireiri

2020/09/12 09:53

おぉ~なるほど。先にinitdbを実行するのですね!うごきましたぁ!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問