既にあるデータベースを中心にflaskアプリケーションを構築するには?
質問
私はすでに、多くのテーブルと多くのデータを持つ既存のデータベースを持っています。
MySQL
. 私は
Flask
アプリを作り、それと一緒にsqlalchemyを使うつもりです。さて、ircで聞いてみたり、googleで調べてみたりして、以下のようなアイデアを試してみました。
まず
私は
sqlacodegen
からモデルを生成するために
DB
. しかし、その後、私はそれについて少し混乱して、もう少し見てみました。そして、私は見つけた
この
.
これはエレガントなソリューションのように見えました。
そこで
第二
を書き直しました。
models.py
そこにある解決策に従って、今私はさらに混乱しています。私はすでに存在するDBと一緒にこのFLASKアプリを構築するための最良のアプローチを探しています。
私はflaskのドキュメントを調べましたが、すでに存在するDBを持つプロジェクトのためのどんな助けも得られなかったのです。ゼロから何かを作成するための多くの良いものがあり、DBとすべてを作成します。しかし、私は本当に混乱しています。
を使った最初の日であることに注意してください。
Flask
を使うのは初めてですが、私は
Django
の経験があるので、基本的なコンセプトはハードルではありません。このユースケースに最適なアプローチを選択するために、いくつかのガイダンスが必要です。詳細な説明があれば、非常にありがたいです。詳細な説明というのは、誰かがすべてのコードを書いて、これについて私に匙を投げてくれることを期待しているわけではありません。
flask
を経由して
sqlalchemy
. 私の DB は
MySQL
.
どのように解決するのですか?
あなたの質問は、flaskとは全く関係ないと言えるでしょう。例えば、テンプレート、ルート、ビュー、ログオンデコレータに問題があるわけではありません。
あなたが苦労しているのは、SQLAlchemyのところです。
そこで提案なのですが、しばらくはFlaskを無視して、まずはSQLAlchemyに慣れることです。既存のデータベースと、SQLAlchemy からどのようにアクセスするかに慣れる必要があります。MySQL のドキュメントツールを使って、自分のやり方を探してみてください。まずはこんな感じです(Flask とは全く関係ないことに注意してください ...まだ)。
#!/usr/bin/python
# -*- mode: python -*-
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///webmgmt.db', convert_unicode=True, echo=False)
Base = declarative_base()
Base.metadata.reflect(engine)
from sqlalchemy.orm import relationship, backref
class Users(Base):
__table__ = Base.metadata.tables['users']
if __name__ == '__main__':
from sqlalchemy.orm import scoped_session, sessionmaker, Query
db_session = scoped_session(sessionmaker(bind=engine))
for item in db_session.query(Users.id, Users.name):
print item
行の中の"
engine =
という行で、SQLAlchemy が MySQL データベースを見つけられるように、MySQL データベースのパスを指定する必要があります。私の場合、既存の sqlite3 データベースを使いました。
行の中の "
class Users(Base)
という行では、MySQLデータベースの既存のテーブルのいずれかを使用する必要があります。私のsqlite3データベースには、"users"という名前のテーブルがあることは知っていました。
この時点で、SQLalchemy は MySQL データベースに接続する方法を知り、テーブルの1つについて も知っています。次に、他のすべてのテーブルを追加する必要があります。最後に、SQLalchemy とのリレーションを指定する必要があります。ここでいうリレーションとは、1対1、1対多、多対多、親子、などといったものです。SQLAlchemy の Web サイトには、これに関するかなり長いセクションがあります。
行の後、"
if __name__ == '__main__'
という行の後に、いくつかのテストコードがあります。これは、私がpythonスクリプトをインポートしない場合、実行されますが、実行されます。ここでは、私はDBセッションを作成し、非常に単純なクエリのためにそれをされていることがわかります。
私の提案は、まず SQLAlchemy のドキュメントの重要な部分、例えば記述的なテーブル定義、リレーションシップモデル、そしてクエリの方法について読んでみることです。一度これを知れば、私の例の最後の部分を、コントローラとして変更することができます(例えば Python の
yield
メソッドを使って)コントローラに変更し、そのコントローラを使用するビューを書きます。
関連
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] Flaskで静的ファイルを提供する方法
-
[解決済み] エラー 1698 (28000)。ユーザー 'root'@'localhost' のアクセスが拒否されました。
-
[解決済み】Flask-SQLAlchemyアプリで生のSQLを実行する方法
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
-
[解決済み] 新しいpip backtrackingの実行時問題の解決