MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_bulk_update

Method test_bulk_update

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

Source from the content-addressed store, hash-verified

1723 @testing.requires.update_returning
1724 @testing.combinations(True, False, argnames="flush_user_first")
1725 def test_bulk_update(self, user_address_fixture, flush_user_first):
1726 User, Address = user_address_fixture(
1727 addresses_args={"backref": "user"}
1728 )
1729 sess = fixture_session()
1730
1731 u1 = User(
1732 name="x",
1733 addresses=[
1734 Address(email_address="e1"),
1735 Address(email_address="e2"),
1736 Address(email_address="e3"),
1737 ],
1738 )
1739 sess.add(u1)
1740
1741 # ha ha! u1 is not persistent yet. autoflush won't happen
1742 # until sess.scalars() actually runs. statement has to be
1743 # created with a pending parameter, not actual parameter
1744 assert inspect(u1).pending
1745
1746 if flush_user_first:
1747 sess.flush()
1748
1749 with self.sql_execution_asserter() as asserter:
1750 addresses = sess.scalars(
1751 u1.addresses.update()
1752 .values(email_address=Address.email_address + "@foo.com")
1753 .returning(Address),
1754 ).all()
1755
1756 eq_(
1757 addresses,
1758 [
1759 Address(user=User(name="x"), email_address="e1@foo.com"),
1760 Address(user=User(name="x"), email_address="e2@foo.com"),
1761 Address(user=User(name="x"), email_address="e3@foo.com"),
1762 ],
1763 )
1764
1765 uid = u1.id
1766
1767 asserter.assert_(
1768 Conditional(
1769 not flush_user_first,
1770 [
1771 CompiledSQL(
1772 "INSERT INTO users (name) VALUES (:name)",
1773 [{"name": "x"}],
1774 ),
1775 Conditional(
1776 testing.requires.insert_executemany_returning.enabled,
1777 [
1778 CompiledSQL(
1779 "INSERT INTO addresses "
1780 "(user_id, email_address) "
1781 "VALUES (:user_id, :email_address) "
1782 "RETURNING addresses.id",

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