Flask-SqLAlchemy INSERT(挿入)
概要
当ページはFlask-SQLAlchemyの【INSERT】に関して記載しております。
基本的な内容は以下にまとめてあります。
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を始めました!