Alembic は python の orm である sqlalchemy のマイグレーションツールです。 日本語記事が少なく、なんとなく使っていると気づかないことが多かったので、はまっところをメモに残しておきます。 Alembic:http://alembic.zzzcomputing.com/en/latest/ 複数のモデルファイルを扱いたい 複数のmodelファイルがある際、Baseクラスのmetadataを結合させる必要があります。 http://liuhongjiang.github.io/hexotech/2015/10/14/alembic-support-multiple-model-files/ このブログにある方法でうまくいきます。 僕の場合、動的インポートを使ってみました。 import importlib from sqlalchemy.schema import
こんにちは。吉田弁二郎です。 タイトルにある Upsert とは、Update or Insert のことです。あるテーブルにデータを insert しようとするとき、ユニーク制約が効いているキーが過去データのものと重複して insert できない場合、update に切り替える処理のことですね。データ量が多くキー重複の懸念がある状況で multiple insert したい場合などに有効な手段の一つです。 私はよく PostgreSQL を使うのですが、Python 経由で操作したい時には psycopg2 とか SQLAlchemy を選ぶことが多いです。特に SQLAlchemy はオブジェクト的にデータベースを操作できるため、web アプリを開発する時に使っています。 今回は、PostgreSQL 9.5 以上で利用可能な upsert 構文 ON CONFLICT ... DO
SQLAlchemyのback_populatesとbackrefって何がどう違うの?っていうかどっちも書かないとどうなるの?という話。 結論から書くと、 (1)backrefを使用した場合 双方向のリレーションを自動的に組んでくれる。 (2)back_populatesを使用した場合 双方向のリレーションを自分で組む必要がある。 (3)back_populatesもbackrefも使用しない場合 トランザクション中、逆方向のフィールドが自動更新されない。 ということになる。 では、具体例を見ていく。 例としてEventモデルとTicketモデルを考える。 1つのEventは複数のTicketをもっている、One to Manyの関係。 backrefを使用した場合 class Event(Base): __tablename__ = 'event' id = Column(Integer
PugSQL is a simple Python interface for using parameterized SQL, in files, with any SQLAlchemy-supported database. import pugsql # Create a module of database functions from a set of sql files on disk. queries = pugsql.module('resources/sql') # Point the module at your database. queries.connect('sqlite:///foo.db') # Invoke parameterized queries, receive dicts! user = queries.find_user(user_id=42)
いつも行っていることをまとめる。 参考にするドキュメント Welcome to Flask — Flask Documentation (0.12) SQLAlchemy - The Database Toolkit for Python Flask-SQLAlchemy — Flask-SQLAlchemy Documentation (2.3) 今回の利用した環境は以下の通り。 MacOS 10.13.3 Python 3.6.3 flask 0.12.2 flask-sqlalchemy 2.3.2 PyMySQL 0.8.0 SQLAlchemy 1.2.2 必要なライブラリをインストールする flask SQLAlchemy flask-sqlalchemy pymysql をインストールする。
沼津で深海魚食えるって聞いて先週食ってきた。食うときに店の人に魚の名前聞いたけど、ゲホウとかアブラボウズとデン(だったかな?)以外は忘れた。いろいろ食ったけど全部覚えられん。深海魚は普通に食えることがわかった。美味いよ。でもまあ目の前にマグロとサーモンと深海魚があったら、たぶんマグロとサーモンを食うと思うw 記念として食うには良いかなw デンとゲホウは俺は好き。 ちょっとSQLAlchemyの練習がてら、遊びサイトやら社内ツールを作ってて、適当にやってたらハマった。平たく言うとsession.commit()時に発行されるSQLの順番は不定になるので、コード上はテーブルAにinsert→テーブルBにinsert→commitと書いていても、先にテーブルBにinsertが発行される場合がある。なので、外部キーを貼るときはちゃんとリレーションを使う。また、外部キーを貼っていなくてもテーブルの更
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く