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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2948閲覧

Flaskでdbの作成ができない

1957151

総合スコア2

Flask

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/03/10 05:18

編集2023/03/10 19:53

実現したいこと

SQLAlchemyを使ってデータベースの作成を行いたい。

前提

ここに質問の内容を詳しく書いてください。

 Flaskを使って簡単なブログアプリケーションを作成しようとしています。
その際にsqlalchemyを使用してdb作成をしようとしているのですが、
Traceback (most recent call last): File "<stdin>", line 1, in <module>
NameError: name 'db' is not defined
上記のようなエラーが発生し、何度やってもうまくいきません。

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

bash

1### コード1 2```from app import db 3 4### コード2 5```db.create_all() 6 7### エラーメッセージ1 8Traceback (most recent call last): 9 File "<stdin>", line 1, in <module> 10 File "C:\Users\Username\OneDrive\ドキュメント\python_Flask\flask2\app.py", line 12, in <module> class Post(db.Model): 11 File "C:\Users\Username\OneDrive\ドキュメント\python_Flask\flask2\app.py", line 16, in Post created_at = db.Column(db.Datetime, nullable=False, default=datetime.now(pytz.timezone("Asia/Tokyo"))) File "C:\Users\81902\anaconda3\lib\site-packages\flask_sqlalchemy\extension.py", line 1005, in __getattr__ raise AttributeError(name) 12AttributeError: Datetime 13 14### エラーメッセージ2 15Traceback (most recent call last): 16File "<stdin>", line 1, in <module> 17NameError: name 'db' is not defined

python

1ソースコード 2from flask import Flask 3from flask import render_template 4from flask_sqlalchemy import SQLAlchemy 5from datetime import datetime 6import pytz 7 8 9app = Flask(__name__) 10app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////temp/project.db' 11db = SQLAlchemy(app) 12 13class Post(db.Model): 14 id = db.Column(db.Integer, primary_key=True) 15 title = db.Column(db.String(30), nullable=False) 16 body = db.Column(db.String(300), nullable=False) 17 created_at = db.Column(db.Datetime, nullable=False, default=datetime.now(pytz.timezone("Asia/Tokyo"))) 18 19@app.route('/') 20def index(): 21 return render_template('index.html') 22

試したこと

・pip install databases
・最新のsqlalchemyのインストール
・from app import app, db
with app.app_context():
db.create_all()

補足情報(FW/ツールのバージョンなど)

windows 10
Python 3.9.12
flask 2.2.3
flask-sqlalchemy 3.0.3
sqlite 3.38.2

どうぞよろしくお願いします。

参考情報

・【完全版】この動画1本でFlaskの基礎を習得!忙しい人のための速習コース(Flask超入門)
https://flask-sqlalchemy.palletsprojects.com
https://msiz07-flask-docs-ja.readthedocs.io

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

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

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

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

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

guest

回答2

0

ベストアンサー

16行目で AttributeError: Datetime がでているのは読んでいますか?
何を見てDatetimeと書きましたか?


https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/
でDatetimeで検索してみるとこの(↓)ページがでてきてページ内検索すると

https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/customizing/#abstract-models-and-mixins

あたりが見つかります。
該当部分はdb.Datetimeではなくてdb.DateTimeと書かれています。

ここを直しましょう。


調べる手順はこんな感じかと。

先回りしておくと

https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/quickstart/#create-the-tables

あたりも読みましょう。

投稿2023/03/10 05:38

編集2023/03/10 05:39
quickquip

総合スコア11029

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

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

1957151

2023/03/10 08:13

ご丁寧にありがとうございます。 DateTime→DateTimeと変更したところ1つ目のエラーは解決できました。 しかし、2つ目のエラー件でhttps://flask-sqlalchemy.palletsprojects.com/en/3.0.x/quickstart/#create-the-tablesより下記のコードを試しました。                from app import app, db                with app.app_context():                …db.create_all() しかし、db.create_all()を入力したところ、               File "<stdin>", line 2              db.create_all() ^               IndentationError: expected an indented block と返されました。インデントが関係しているとのことですが、ミスはないと思います。 もし可能であれば、追加でアドバイスをいただけると幸いです。よろしくお願いいたします。
1957151

2023/03/10 10:53

bash >>> from app import app >>> from app import db >>> with app.app_context(): ... db.create_all() ... >>> exit() 上記のような記法で上手くdbを作成することができました。 ありがとうございました。
guest

0

AttributeError: Datetime

動作未検証ですが、エラーメッセージ1については誤字が原因だと思われます。
参考:class sqlalchemy.types.DateTime(timezone=False)

投稿2023/03/10 05:33

can110

総合スコア38233

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

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

1957151

2023/03/10 08:14

ご丁寧にありがとうございます。 1つ目のエラーは誤字でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問