MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_bulk_insert

Method test_bulk_insert

test/orm/test_dynamic.py:1661–1721  ·  view source on GitHub ↗
(self, user_address_fixture, flush_user_first)

Source from the content-addressed store, hash-verified

1659 @testing.requires.insert_executemany_returning
1660 @testing.combinations(True, False, argnames="flush_user_first")
1661 def test_bulk_insert(self, user_address_fixture, flush_user_first):
1662 User, Address = user_address_fixture(
1663 addresses_args={"backref": "user"}
1664 )
1665 sess = fixture_session()
1666
1667 u1 = User(name="x")
1668 sess.add(u1)
1669
1670 # ha ha! u1 is not persistent yet. autoflush won't happen
1671 # until sess.scalars() actually runs. statement has to be
1672 # created with a pending parameter, not actual parameter
1673 assert inspect(u1).pending
1674
1675 if flush_user_first:
1676 sess.flush()
1677
1678 with self.sql_execution_asserter() as asserter:
1679 addresses = sess.scalars(
1680 u1.addresses.insert().returning(Address),
1681 [
1682 {"email_address": "e1"},
1683 {"email_address": "e2"},
1684 {"email_address": "e3"},
1685 ],
1686 ).all()
1687
1688 eq_(
1689 addresses,
1690 [
1691 Address(user=User(name="x"), email_address="e1"),
1692 Address(user=User(name="x"), email_address="e2"),
1693 Address(user=User(name="x"), email_address="e3"),
1694 ],
1695 )
1696
1697 uid = u1.id
1698
1699 asserter.assert_(
1700 Conditional(
1701 not flush_user_first,
1702 [
1703 CompiledSQL(
1704 "INSERT INTO users (name) VALUES (:name)",
1705 [{"name": "x"}],
1706 )
1707 ],
1708 [],
1709 ),
1710 CompiledSQL(
1711 "INSERT INTO addresses (user_id, email_address) "
1712 "VALUES (:param_1, :email_address) "
1713 "RETURNING addresses.id, addresses.user_id, "
1714 "addresses.email_address",
1715 [
1716 {"param_1": uid, "email_address": "e1"},
1717 {"param_1": uid, "email_address": "e2"},
1718 {"param_1": uid, "email_address": "e3"},

Callers

nothing calls this directly

Calls 15

fixture_sessionFunction · 0.90
inspectFunction · 0.90
eq_Function · 0.90
ConditionalClass · 0.90
CompiledSQLClass · 0.90
UserClass · 0.70
AddressClass · 0.70
addMethod · 0.45
flushMethod · 0.45
allMethod · 0.45
scalarsMethod · 0.45

Tested by

no test coverage detected