Flask-SqLAlchemy INSERT(挿入)

Flask Flask-SQLAlchemy

概要

当ページはFlask-SQLAlchemyの【INSERT】に関して記載しております。

基本的な内容は以下にまとめてあります。

https://outpust.jp/blog/4ab4e69d-a47c-4be1-a33e-0bdb9c042de9

INSERT

データを挿入するには、モデル オブジェクトを に渡します。

構文
db.session.add(model_object)

https://flask-sqlalchemy.palletsprojects.com/en/3.0.x/queries/#insert-update-delete

1件挿入「.add()」

test = Test(name="test")

db.session.add(test)
db.session.commit()
処理前
処理前
処理後
処理後

どの時点でprimary_keyが設定されるか確認

結果:commit 後

test = Test(name="test")

print(f'A={test.id}')
db.session.add(test)
print(f'B={test.id}')
db.session.commit()
print(f'C={test.id}')

-- 結果 --
A=None
B=None
C=7

.sessionの中身

正常終了パターン

try:
    outpust  # A
    test1 = Test(name="test1")
    db.session.add(test1)
    outpust  # B

    test2 = Test(name='test2')
    db.session.add(test2)
    outpust  # C

    db.session.commit()
    outpust  # D
except Exception as e:
    print(e)
    db.session.rollback()
    outpust  # E
finally:
    db.session.close()
    outpust  # F
結果 A
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 B
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 1} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True
結果 C
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 2} IdentitySet([, ])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 D
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 3} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 F
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 0} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)

エラーパターン

try:
    outpust  # A
    test1 = Test(name="test1")
    db.session.add(test1)
    outpust  # B

    # エラー発生!
    raise Exception

    test2 = Test(name='test2')
    db.session.add(test2)
    outpust  # C

    db.session.commit()
    outpust  # D
except Exception as e:
    print(e)
    db.session.rollback()
    outpust  # E
finally:
    db.session.close()
    outpust  # F
結果 A
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 B
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 1} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 E
db.session = {scoped_session} 
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 1} 
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} 
 registry = {ScopedRegistry} 
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=, query_cls=, bind=None, autoflush=True, expire_on_commit=True)
結果 F
db.session = {scoped_session} <sqlalchemy.orm.scoping.scoped_session object at 0x0000024193FE5150>
 autoflush = {bool} True
 bind = {NoneType} None
 deleted = {IdentitySet: 0} IdentitySet([])
 dirty = {IdentitySet: 0} IdentitySet([])
 identity_map = {WeakInstanceDict: 0} <sqlalchemy.orm.identity.WeakInstanceDict object at 0x00000241986C8050>
 info = {dict: 0} {}
 is_active = {bool} True
 new = {IdentitySet: 0} IdentitySet([])
 no_autoflush = {_GeneratorContextManager} <contextlib._GeneratorContextManager object at 0x00000241986D5310>
 registry = {ScopedRegistry} <sqlalchemy.util._collections.ScopedRegistry object at 0x0000024193FE5180>
 session_factory = {sessionmaker} sessionmaker(class_='Session', db=<SQLAlchemy>, query_cls=<class 'flask_sqlalchemy.query.Query'>, bind=None, autoflush=True, expire_on_commit=True)
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!