127 KB
/srv/reproducible-results/rbuild-debian/r-b-build.dL92hvBl/b1/sqlalchemy_2.0.40+ds1-1_amd64.changes vs.
/srv/reproducible-results/rbuild-debian/r-b-build.dL92hvBl/b2/sqlalchemy_2.0.40+ds1-1_amd64.changes
539 B
Files
    
Offset 1, 5 lines modifiedOffset 1, 5 lines modified
  
1 ·ca72379bd5d15c53b091309cf0477568·3987732·doc·optional·python-sqlalchemy-doc_2.0.40+ds1-1_all.deb1 ·fed26ccdb95e92503426bef96bdc9eb3·3987552·doc·optional·python-sqlalchemy-doc_2.0.40+ds1-1_all.deb
2 ·82d586107f3b0c4f6109756a60e454bb·918780·debug·optional·python3-sqlalchemy-ext-dbgsym_2.0.40+ds1-1_amd64.deb2 ·82d586107f3b0c4f6109756a60e454bb·918780·debug·optional·python3-sqlalchemy-ext-dbgsym_2.0.40+ds1-1_amd64.deb
3 ·d47688537f8583f6c3877790c6b5d52a·153076·python·optional·python3-sqlalchemy-ext_2.0.40+ds1-1_amd64.deb3 ·d47688537f8583f6c3877790c6b5d52a·153076·python·optional·python3-sqlalchemy-ext_2.0.40+ds1-1_amd64.deb
4 ·06b6365d77f51caac8542c94ebe1ba72·1210228·python·optional·python3-sqlalchemy_2.0.40+ds1-1_all.deb4 ·06b6365d77f51caac8542c94ebe1ba72·1210228·python·optional·python3-sqlalchemy_2.0.40+ds1-1_all.deb
126 KB
python-sqlalchemy-doc_2.0.40+ds1-1_all.deb
452 B
file list
    
Offset 1, 3 lines modifiedOffset 1, 3 lines modified
1 -rw-r--r--···0········0········0········4·2025-02-06·11:19:07.000000·debian-binary1 -rw-r--r--···0········0········0········4·2025-02-06·11:19:07.000000·debian-binary
2 -rw-r--r--···0········0········0····13680·2025-02-06·11:19:07.000000·control.tar.xz2 -rw-r--r--···0········0········0····13676·2025-02-06·11:19:07.000000·control.tar.xz
3 -rw-r--r--···0········0········0··3973860·2025-02-06·11:19:07.000000·data.tar.xz3 -rw-r--r--···0········0········0··3973684·2025-02-06·11:19:07.000000·data.tar.xz
98.0 B
control.tar.xz
70.0 B
control.tar
48.0 B
./md5sums
30.0 B
./md5sums
Files differ
126 KB
data.tar.xz
126 KB
data.tar
3.15 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_10.html
    
Offset 592, 15 lines modifiedOffset 592, 15 lines modified
592 <section·id="changelog">592 <section·id="changelog">
593 <h1>1.0·Changelog<a·class="headerlink"·href="#changelog"·title="Link·to·this·heading">¶</a></h1>593 <h1>1.0·Changelog<a·class="headerlink"·href="#changelog"·title="Link·to·this·heading">¶</a></h1>
594 <section·id="change-1.0.19">594 <section·id="change-1.0.19">
595 <h2·class="release-version">1.0.19<a·class="headerlink"·href="#change-1.0.19"·title="Link·to·this·heading">¶</a></h2>595 <h2·class="release-version">1.0.19<a·class="headerlink"·href="#change-1.0.19"·title="Link·to·this·heading">¶</a></h2>
596 Released:·August·3,·2017<section·id="change-1.0.19-oracle">596 Released:·August·3,·2017<section·id="change-1.0.19-oracle">
597 <h3>oracle<a·class="headerlink"·href="#change-1.0.19-oracle"·title="Link·to·this·heading">¶</a></h3>597 <h3>oracle<a·class="headerlink"·href="#change-1.0.19-oracle"·title="Link·to·this·heading">¶</a></h3>
598 <ul·class="simple">598 <ul·class="simple">
599 <li><p·class="caption"·id="change-1.0.19-0"><span·class="target"·id="change-ec8fd72ca0ab2d0123169536543fb6cd"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ec8fd72ca0ab2d0123169536543fb6cd">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where599 <li><p·class="caption"·id="change-1.0.19-0"><span·class="target"·id="change-ec8fd72ca0ab2d0123169536543fb6cd"><strong>[oracle]·[bug]·[performance]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ec8fd72ca0ab2d0123169536543fb6cd">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where
600 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its600 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its
601 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being601 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being
602 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy602 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy
603 side·which·convert·all·strings·to·unicode·unconditionally·and·causing603 side·which·convert·all·strings·to·unicode·unconditionally·and·causing
604 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the604 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the
605 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode605 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode
606 conversion·functions·are·no·longer·necessary·and·are·disabled·if606 conversion·functions·are·no·longer·necessary·and·are·disabled·if
1.14 KB
html2text {}
    
Offset 318, 15 lines modifiedOffset 318, 15 lines modified
318 ······················#·_\x8o_\x8r_\x8a_\x8c_\x8l_\x8e318 ······················#·_\x8o_\x8r_\x8a_\x8c_\x8l_\x8e
319 ······················#·_\x8t_\x8e_\x8s_\x8t_\x8s319 ······················#·_\x8t_\x8e_\x8s_\x8t_\x8s
320 ······················#·_\x8m_\x8i_\x8s_\x8c320 ······················#·_\x8m_\x8i_\x8s_\x8c
321 *\x8**\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.0\x80·C\x8Ch\x8ha\x8an\x8ng\x8ge\x8el\x8lo\x8og\x8g_\x8?\x8·*\x8**\x8**\x8**\x8**\x8**\x8*321 *\x8**\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.0\x80·C\x8Ch\x8ha\x8an\x8ng\x8ge\x8el\x8lo\x8og\x8g_\x8?\x8·*\x8**\x8**\x8**\x8**\x8**\x8*
322 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.0\x80.\x8.1\x819\x89_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*322 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.0\x80.\x8.1\x819\x89_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*
323 Released:·August·3,·2017323 Released:·August·3,·2017
324 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*324 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
325 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x8325 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x8
326 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle326 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle
327 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which327 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which
328 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on328 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on
329 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which329 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which
330 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance330 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance
331 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been331 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been
332 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions332 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions
3.09 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_11.html
    
Offset 875, 15 lines modifiedOffset 875, 15 lines modified
875 </section>875 </section>
876 </section>876 </section>
877 <section·id="change-1.1.13">877 <section·id="change-1.1.13">
878 <h2·class="release-version">1.1.13<a·class="headerlink"·href="#change-1.1.13"·title="Link·to·this·heading">¶</a></h2>878 <h2·class="release-version">1.1.13<a·class="headerlink"·href="#change-1.1.13"·title="Link·to·this·heading">¶</a></h2>
879 Released:·August·3,·2017<section·id="change-1.1.13-oracle">879 Released:·August·3,·2017<section·id="change-1.1.13-oracle">
880 <h3>oracle<a·class="headerlink"·href="#change-1.1.13-oracle"·title="Link·to·this·heading">¶</a></h3>880 <h3>oracle<a·class="headerlink"·href="#change-1.1.13-oracle"·title="Link·to·this·heading">¶</a></h3>
881 <ul·class="simple">881 <ul·class="simple">
882 <li><p·class="caption"·id="change-1.1.13-0"><span·class="target"·id="change-91e9180bc7f72ab73ee81944ee6c0b5b"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-91e9180bc7f72ab73ee81944ee6c0b5b">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where882 <li><p·class="caption"·id="change-1.1.13-0"><span·class="target"·id="change-91e9180bc7f72ab73ee81944ee6c0b5b"><strong>[oracle]·[bug]·[performance]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-91e9180bc7f72ab73ee81944ee6c0b5b">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where
883 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its883 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its
884 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being884 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being
885 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy885 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy
886 side·which·convert·all·strings·to·unicode·unconditionally·and·causing886 side·which·convert·all·strings·to·unicode·unconditionally·and·causing
887 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the887 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the
888 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode888 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode
889 conversion·functions·are·no·longer·necessary·and·are·disabled·if889 conversion·functions·are·no·longer·necessary·and·are·disabled·if
1.18 KB
html2text {}
    
Offset 496, 15 lines modifiedOffset 496, 15 lines modified
496 ······the·same·PRECEDING·or·FOLLOWING·keywords·in·a·range·by·allowing·for·the496 ······the·same·PRECEDING·or·FOLLOWING·keywords·in·a·range·by·allowing·for·the
497 ······left·side·of·the·range·to·be·positive·and·for·the·right·to·be·negative,497 ······left·side·of·the·range·to·be·positive·and·for·the·right·to·be·negative,
498 ······e.g.·(1,·3)·is·“1·FOLLOWING·AND·3·FOLLOWING”.498 ······e.g.·(1,·3)·is·“1·FOLLOWING·AND·3·FOLLOWING”.
499 ······References:·_\x8#_\x84_\x80_\x85_\x83499 ······References:·_\x8#_\x84_\x80_\x85_\x83
500 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.1\x81.\x8.1\x813\x83_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*500 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.1\x81.\x8.1\x813\x83_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*
501 Released:·August·3,·2017501 Released:·August·3,·2017
502 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*502 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
503 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x8503 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x8
504 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle504 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle
505 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which505 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which
506 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on506 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on
507 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which507 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which
508 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance508 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance
509 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been509 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been
510 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions510 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions
2.91 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_12.html
    
Offset 2977, 15 lines modifiedOffset 2977, 15 lines modified
2977 </p>2977 </p>
2978 </li>2978 </li>
2979 </ul>2979 </ul>
2980 </section>2980 </section>
2981 <section·id="change-1.2.0b3-oracle">2981 <section·id="change-1.2.0b3-oracle">
2982 <h3>oracle<a·class="headerlink"·href="#change-1.2.0b3-oracle"·title="Link·to·this·heading">¶</a></h3>2982 <h3>oracle<a·class="headerlink"·href="#change-1.2.0b3-oracle"·title="Link·to·this·heading">¶</a></h3>
2983 <ul·class="simple">2983 <ul·class="simple">
2984 <li><p·class="caption"·id="change-1.2.0b3-43"><span·class="target"·id="change-7cb9a3370310381d19eb1a17c5a84a91"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-7cb9a3370310381d19eb1a17c5a84a91">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where2984 <li><p·class="caption"·id="change-1.2.0b3-43"><span·class="target"·id="change-7cb9a3370310381d19eb1a17c5a84a91"><strong>[oracle]·[bug]·[performance]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-7cb9a3370310381d19eb1a17c5a84a91">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·where
2985 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its2985 cx_Oracle·as·of·version·5.3·dropped·the·<code·class="docutils·literal·notranslate"><span·class="pre">.UNICODE</span></code>·symbol·from·its
2986 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being2986 namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being
2987 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy2987 turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy
2988 side·which·convert·all·strings·to·unicode·unconditionally·and·causing2988 side·which·convert·all·strings·to·unicode·unconditionally·and·causing
2989 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the2989 a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the
2990 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode2990 “WITH_UNICODE”·mode·has·been·removed·entirely·as·of·5.1,·so·the·expensive·unicode
2991 conversion·functions·are·no·longer·necessary·and·are·disabled·if2991 conversion·functions·are·no·longer·necessary·and·are·disabled·if
1.15 KB
html2text {}
    
Offset 1879, 15 lines modifiedOffset 1879, 15 lines modified
1879 verify·the·number·of·rows·affected·on·a·target·version.1879 verify·the·number·of·rows·affected·on·a·target·version.
1880 [\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x81880 [\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
1881 Added·a·rule·to·SQL·Server·index·reflection·to·ignore·the·so-called·“heap”1881 Added·a·rule·to·SQL·Server·index·reflection·to·ignore·the·so-called·“heap”
1882 index·that·is·implicitly·present·on·a·table·that·does·not·specify·a·clustered1882 index·that·is·implicitly·present·on·a·table·that·does·not·specify·a·clustered
1883 index.1883 index.
1884 References:·_\x8#_\x84_\x80_\x85_\x891884 References:·_\x8#_\x84_\x80_\x85_\x89
1885 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*1885 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
1886 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x81886 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\x8
1887 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle1887 ······Fixed·performance·regression·caused·by·the·fix·for·_\x8#_\x83_\x89_\x83_\x87·where·cx_Oracle
1888 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which1888 ······as·of·version·5.3·dropped·the·.UNICODE·symbol·from·its·namespace,·which
1889 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on1889 ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on
1890 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which1890 ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which
1891 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance1891 ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance
1892 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been1892 ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been
1893 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions1893 ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions
8.99 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_13.html
    
Offset 1803, 30 lines modifiedOffset 1803, 30 lines modified
1803 </p>1803 </p>
1804 </li>1804 </li>
1805 </ul>1805 </ul>
1806 </section>1806 </section>
1807 <section·id="change-1.3.17-oracle">1807 <section·id="change-1.3.17-oracle">
1808 <h3>oracle<a·class="headerlink"·href="#change-1.3.17-oracle"·title="Link·to·this·heading">¶</a></h3>1808 <h3>oracle<a·class="headerlink"·href="#change-1.3.17-oracle"·title="Link·to·this·heading">¶</a></h3>
1809 <ul·class="simple">1809 <ul·class="simple">
 1810 <li><p·class="caption"·id="change-1.3.17-14"><span·class="target"·id="change-aae71399cbb61c78ebaa99fe5ebbc85f"><strong>[oracle]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-aae71399cbb61c78ebaa99fe5ebbc85f">¶</a></span><p>Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column
 1811 outputtype·handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential
 1812 changes·coming·in·cx_Oracle·8.</p>
 1813 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5246">#5246</a></p>
 1814 </p>
 1815 </li>
1810 <li><p·class="caption"·id="change-1.3.17-14"><span·class="target"·id="change-cc5a1743d1951d72594d609e6e1a5c99"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-cc5a1743d1951d72594d609e6e1a5c99">¶</a></span><p>Changed·the·implementation·of·fetching·CLOB·and·BLOB·objects·to·use1816 <li><p·class="caption"·id="change-1.3.17-15"><span·class="target"·id="change-cc5a1743d1951d72594d609e6e1a5c99"><strong>[oracle]·[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-cc5a1743d1951d72594d609e6e1a5c99">¶</a></span><p>Changed·the·implementation·of·fetching·CLOB·and·BLOB·objects·to·use
1811 cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline1817 cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline
1812 with·other·result·columns,·rather·than·performing·a·separate·fetch.·As1818 with·other·result·columns,·rather·than·performing·a·separate·fetch.·As
1813 always,·this·can·be·disabled·by·setting·auto_convert_lobs·to·False.</p>1819 always,·this·can·be·disabled·by·setting·auto_convert_lobs·to·False.</p>
1814 <p>As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank1820 <p>As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank
1815 string·on·INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with1821 string·on·INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with
1816 that·of·VARCHAR·on·Oracle.</p>1822 that·of·VARCHAR·on·Oracle.</p>
1817 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5314">#5314</a></p>1823 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5314">#5314</a></p>
1818 </p>1824 </p>
1819 </li>1825 </li>
1820 <li><p·class="caption"·id="change-1.3.17-15"><span·class="target"·id="change-aae71399cbb61c78ebaa99fe5ebbc85f"><strong>[oracle]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-aae71399cbb61c78ebaa99fe5ebbc85f">¶</a></span><p>Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column 
1821 outputtype·handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential 
1822 changes·coming·in·cx_Oracle·8.</p> 
1823 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5246">#5246</a></p> 
1824 </p> 
1825 </li> 
1826 </ul>1826 </ul>
1827 </section>1827 </section>
1828 <section·id="change-1.3.17-misc">1828 <section·id="change-1.3.17-misc">
1829 <h3>misc<a·class="headerlink"·href="#change-1.3.17-misc"·title="Link·to·this·heading">¶</a></h3>1829 <h3>misc<a·class="headerlink"·href="#change-1.3.17-misc"·title="Link·to·this·heading">¶</a></h3>
1830 <ul·class="simple">1830 <ul·class="simple">
1831 <li><p·class="caption"·id="change-1.3.17-16"><span·class="target"·id="change-3d26d8810b452ce62aee1841b6a4725d"><strong>[change]·[firebird]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-3d26d8810b452ce62aee1841b6a4725d">¶</a></span><p>Adjusted·dialect·loading·for·<code·class="docutils·literal·notranslate"><span·class="pre">firebird://</span></code>·URIs·so·the·external1831 <li><p·class="caption"·id="change-1.3.17-16"><span·class="target"·id="change-3d26d8810b452ce62aee1841b6a4725d"><strong>[change]·[firebird]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-3d26d8810b452ce62aee1841b6a4725d">¶</a></span><p>Adjusted·dialect·loading·for·<code·class="docutils·literal·notranslate"><span·class="pre">firebird://</span></code>·URIs·so·the·external
1832 sqlalchemy-firebird·dialect·will·be·used·if·it·has·been·installed,1832 sqlalchemy-firebird·dialect·will·be·used·if·it·has·been·installed,
Offset 2204, 15 lines modifiedOffset 2204, 15 lines modified
2204 <h3>misc<a·class="headerlink"·href="#change-1.3.14-misc"·title="Link·to·this·heading">¶</a></h3>2204 <h3>misc<a·class="headerlink"·href="#change-1.3.14-misc"·title="Link·to·this·heading">¶</a></h3>
2205 <ul·class="simple">2205 <ul·class="simple">
2206 <li><p·class="caption"·id="change-1.3.14-12"><span·class="target"·id="change-f50027dab71171da288167ea6ede7548"><strong>[usecase]·[ext]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-f50027dab71171da288167ea6ede7548">¶</a></span><p>Added·keyword·arguments·to·the·<a·class="reference·internal"·href="../orm/extensions/mutable.html#sqlalchemy.ext.mutable.MutableList.sort"·title="sqlalchemy.ext.mutable.MutableList.sort"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">MutableList.sort()</span></code></a>·function·so·that·a2206 <li><p·class="caption"·id="change-1.3.14-12"><span·class="target"·id="change-f50027dab71171da288167ea6ede7548"><strong>[usecase]·[ext]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-f50027dab71171da288167ea6ede7548">¶</a></span><p>Added·keyword·arguments·to·the·<a·class="reference·internal"·href="../orm/extensions/mutable.html#sqlalchemy.ext.mutable.MutableList.sort"·title="sqlalchemy.ext.mutable.MutableList.sort"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">MutableList.sort()</span></code></a>·function·so·that·a
2207 key·function·as·well·as·the·“reverse”·keyword·argument·can·be·provided.</p>2207 key·function·as·well·as·the·“reverse”·keyword·argument·can·be·provided.</p>
2208 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5114">#5114</a></p>2208 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5114">#5114</a></p>
2209 </p>2209 </p>
2210 </li>2210 </li>
2211 <li><p·class="caption"·id="change-1.3.14-13"><span·class="target"·id="change-4aee123e6060a97e0c5cd34e2d4f5ffa"><strong>[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4aee123e6060a97e0c5cd34e2d4f5ffa">¶</a></span><p>Revised·an·internal·change·to·the·test·system·added·as·a·result·of2211 <li><p·class="caption"·id="change-1.3.14-13"><span·class="target"·id="change-4aee123e6060a97e0c5cd34e2d4f5ffa"><strong>[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4aee123e6060a97e0c5cd34e2d4f5ffa">¶</a></span><p>Revised·an·internal·change·to·the·test·system·added·as·a·result·of
2212 <a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5085">#5085</a>·where·a·testing-related·module·per·dialect·would·be·loaded2212 <a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5085">#5085</a>·where·a·testing-related·module·per·dialect·would·be·loaded
2213 unconditionally·upon·making·use·of·that·dialect,·pulling·in·SQLAlchemy’s2213 unconditionally·upon·making·use·of·that·dialect,·pulling·in·SQLAlchemy’s
2214 testing·framework·as·well·as·the·ORM·into·the·module·import·space.···This2214 testing·framework·as·well·as·the·ORM·into·the·module·import·space.···This
2215 would·only·impact·initial·startup·time·and·memory·to·a·modest·extent,2215 would·only·impact·initial·startup·time·and·memory·to·a·modest·extent,
2216 however·it’s·best·that·these·additional·modules·aren’t·reverse-dependent·on2216 however·it’s·best·that·these·additional·modules·aren’t·reverse-dependent·on
2217 straight·Core·usage.</p>2217 straight·Core·usage.</p>
2218 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5180">#5180</a></p>2218 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5180">#5180</a></p>
3.55 KB
html2text {}
    
Offset 1144, 28 lines modifiedOffset 1144, 28 lines modified
1144 ······References:·_\x8#_\x85_\x82_\x85_\x851144 ······References:·_\x8#_\x85_\x82_\x85_\x85
1145 [\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8ef\x8fl\x8le\x8ec\x8ct\x8ti\x8io\x8on\x8n]\x8]·_\x81145 [\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8ef\x8fl\x8le\x8ec\x8ct\x8ti\x8io\x8on\x8n]\x8]·_\x8
1146 Fix·a·regression·introduced·by·the·reflection·of·computed·column·in·MSSQL·when1146 Fix·a·regression·introduced·by·the·reflection·of·computed·column·in·MSSQL·when
1147 using·SQL·server·versions·before·2012,·which·does·not·support·the·concat1147 using·SQL·server·versions·before·2012,·which·does·not·support·the·concat
1148 function.1148 function.
1149 References:·_\x8#_\x85_\x82_\x87_\x811149 References:·_\x8#_\x85_\x82_\x87_\x81
1150 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*1150 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
1151 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8 
1152 ······Changed·the·implementation·of·fetching·CLOB·and·BLOB·objects·to·use 
1153 ······cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline 
1154 ······with·other·result·columns,·rather·than·performing·a·separate·fetch.·As 
1155 ······always,·this·can·be·disabled·by·setting·auto_convert_lobs·to·False. 
1156 ······As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank 
1157 ······string·on·INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with 
1158 ······that·of·VARCHAR·on·Oracle. 
1159 ······References:·_\x8#_\x85_\x83_\x81_\x84 
1160 [\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x81151 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
1161 Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column·outputtype1152 ······Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column
1162 handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential·changes·coming1153 ······outputtype·handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential
1163 in·cx_Oracle·8.1154 ······changes·coming·in·cx_Oracle·8.
1164 References:·_\x8#_\x85_\x82_\x84_\x861155 ······References:·_\x8#_\x85_\x82_\x84_\x86
 1156 [\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·_\x8
 1157 Changed·the·implementation·of·fetching·CLOB·and·BLOB·objects·to·use·cx_Oracle’s
 1158 native·implementation·which·fetches·CLOB/BLOB·objects·inline·with·other·result
 1159 columns,·rather·than·performing·a·separate·fetch.·As·always,·this·can·be
 1160 disabled·by·setting·auto_convert_lobs·to·False.
 1161 As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank·string·on
 1162 INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with·that·of·VARCHAR
 1163 on·Oracle.
 1164 References:·_\x8#_\x85_\x83_\x81_\x84
1165 *\x8**\x8**\x8**\x8*·m\x8mi\x8is\x8sc\x8c_\x8?\x8·*\x8**\x8**\x8**\x8*1165 *\x8**\x8**\x8**\x8*·m\x8mi\x8is\x8sc\x8c_\x8?\x8·*\x8**\x8**\x8**\x8*
1166 ····*·[\x8[c\x8ch\x8ha\x8an\x8ng\x8ge\x8e]\x8]·[\x8[f\x8fi\x8ir\x8re\x8eb\x8bi\x8ir\x8rd\x8d]\x8]·_\x81166 ····*·[\x8[c\x8ch\x8ha\x8an\x8ng\x8ge\x8e]\x8]·[\x8[f\x8fi\x8ir\x8re\x8eb\x8bi\x8ir\x8rd\x8d]\x8]·_\x8
1167 ······Adjusted·dialect·loading·for·firebird://·URIs·so·the·external·sqlalchemy-1167 ······Adjusted·dialect·loading·for·firebird://·URIs·so·the·external·sqlalchemy-
1168 ······firebird·dialect·will·be·used·if·it·has·been·installed,·otherwise·fall1168 ······firebird·dialect·will·be·used·if·it·has·been·installed,·otherwise·fall
1169 ······back·to·the·(now·deprecated)·internal·Firebird·dialect.1169 ······back·to·the·(now·deprecated)·internal·Firebird·dialect.
1170 ······References:·_\x8#_\x85_\x82_\x87_\x881170 ······References:·_\x8#_\x85_\x82_\x87_\x88
1171 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.3\x83.\x8.1\x816\x86_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*1171 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.3\x83.\x8.1\x816\x86_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*
Offset 1409, 15 lines modifiedOffset 1409, 15 lines modified
1409 ······but·owned·by·someone·else.·Pull·request·courtesy·Dave·Hirschfeld.1409 ······but·owned·by·someone·else.·Pull·request·courtesy·Dave·Hirschfeld.
1410 ······References:·_\x8#_\x85_\x81_\x84_\x861410 ······References:·_\x8#_\x85_\x81_\x84_\x86
1411 *\x8**\x8**\x8**\x8*·m\x8mi\x8is\x8sc\x8c_\x8?\x8·*\x8**\x8**\x8**\x8*1411 *\x8**\x8**\x8**\x8*·m\x8mi\x8is\x8sc\x8c_\x8?\x8·*\x8**\x8**\x8**\x8*
1412 ····*·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·[\x8[e\x8ex\x8xt\x8t]\x8]·_\x81412 ····*·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·[\x8[e\x8ex\x8xt\x8t]\x8]·_\x8
1413 ······Added·keyword·arguments·to·the·_\x8M_\x8u_\x8t_\x8a_\x8b_\x8l_\x8e_\x8L_\x8i_\x8s_\x8t_\x8._\x8s_\x8o_\x8r_\x8t_\x8(_\x8)·function·so·that·a·key1413 ······Added·keyword·arguments·to·the·_\x8M_\x8u_\x8t_\x8a_\x8b_\x8l_\x8e_\x8L_\x8i_\x8s_\x8t_\x8._\x8s_\x8o_\x8r_\x8t_\x8(_\x8)·function·so·that·a·key
1414 ······function·as·well·as·the·“reverse”·keyword·argument·can·be·provided.1414 ······function·as·well·as·the·“reverse”·keyword·argument·can·be·provided.
1415 ······References:·_\x8#_\x85_\x81_\x81_\x841415 ······References:·_\x8#_\x85_\x81_\x81_\x84
1416 [\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·_\x81416 [\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·_\x8
1417 Revised·an·internal·change·to·the·test·system·added·as·a·result·of·_\x8#_\x85_\x80_\x88_\x85·where1417 Revised·an·internal·change·to·the·test·system·added·as·a·result·of·_\x8#_\x85_\x80_\x88_\x85·where
1418 a·testing-related·module·per·dialect·would·be·loaded·unconditionally·upon1418 a·testing-related·module·per·dialect·would·be·loaded·unconditionally·upon
1419 making·use·of·that·dialect,·pulling·in·SQLAlchemy’s·testing·framework·as·well1419 making·use·of·that·dialect,·pulling·in·SQLAlchemy’s·testing·framework·as·well
1420 as·the·ORM·into·the·module·import·space.·This·would·only·impact·initial·startup1420 as·the·ORM·into·the·module·import·space.·This·would·only·impact·initial·startup
1421 time·and·memory·to·a·modest·extent,·however·it’s·best·that·these·additional1421 time·and·memory·to·a·modest·extent,·however·it’s·best·that·these·additional
1422 modules·aren’t·reverse-dependent·on·straight·Core·usage.1422 modules·aren’t·reverse-dependent·on·straight·Core·usage.
1423 References:·_\x8#_\x85_\x81_\x88_\x801423 References:·_\x8#_\x85_\x81_\x88_\x80
35.4 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_14.html
    
Offset 3140, 36 lines modifiedOffset 3140, 36 lines modified
3140 attributes·and·entities·that·are·installed·as·part·of·an·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Insert"·title="sqlalchemy.sql.expression.Insert"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Insert</span></code></a>,3140 attributes·and·entities·that·are·installed·as·part·of·an·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Insert"·title="sqlalchemy.sql.expression.Insert"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Insert</span></code></a>,
3141 <a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Update"·title="sqlalchemy.sql.expression.Update"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Update</span></code></a>,·or·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Delete"·title="sqlalchemy.sql.expression.Delete"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Delete</span></code></a>·construct.·The3141 <a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Update"·title="sqlalchemy.sql.expression.Update"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Update</span></code></a>,·or·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Delete"·title="sqlalchemy.sql.expression.Delete"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Delete</span></code></a>·construct.·The
3142 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.Select.column_descriptions"·title="sqlalchemy.sql.expression.Select.column_descriptions"><code·class="xref·py·py-attr·docutils·literal·notranslate"><span·class="pre">Select.column_descriptions</span></code></a>·accessor·is·also·now·implemented·for3142 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.Select.column_descriptions"·title="sqlalchemy.sql.expression.Select.column_descriptions"><code·class="xref·py·py-attr·docutils·literal·notranslate"><span·class="pre">Select.column_descriptions</span></code></a>·accessor·is·also·now·implemented·for
3143 Core-only·selectables.</p>3143 Core-only·selectables.</p>
3144 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7861">#7861</a></p>3144 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7861">#7861</a></p>
3145 </p>3145 </p>
3146 </li>3146 </li>
3147 <li><p·class="caption"·id="change-1.4.33-2"><span·class="target"·id="change-9e8374aab257ac3366e02a4907fc449a"><strong>[orm]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-9e8374aab257ac3366e02a4907fc449a">¶</a></span><p>Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of 
3148 intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an 
3149 expression·object·is·created.·These·clones·have·been·greatly·reduced, 
3150 reducing·the·number·of·total·expression·objects·stored·in·memory·by 
3151 ORM·mappings·by·about·30%.</p> 
3152 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7823">#7823</a></p> 
3153 </p> 
3154 </li> 
3155 <li><p·class="caption"·id="change-1.4.33-3"><span·class="target"·id="change-6e997a9f24c37627b3bc1af26a5a2c9d"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-6e997a9f24c37627b3bc1af26a5a2c9d">¶</a></span><p>Fixed·regression·in·“dynamic”·loader·strategy·where·the3147 <li><p·class="caption"·id="change-1.4.33-2"><span·class="target"·id="change-6e997a9f24c37627b3bc1af26a5a2c9d"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-6e997a9f24c37627b3bc1af26a5a2c9d">¶</a></span><p>Fixed·regression·in·“dynamic”·loader·strategy·where·the
3156 <a·class="reference·internal"·href="../orm/queryguide/query.html#sqlalchemy.orm.Query.filter_by"·title="sqlalchemy.orm.Query.filter_by"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">Query.filter_by()</span></code></a>·method·would·not·be·given·an·appropriate3148 <a·class="reference·internal"·href="../orm/queryguide/query.html#sqlalchemy.orm.Query.filter_by"·title="sqlalchemy.orm.Query.filter_by"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">Query.filter_by()</span></code></a>·method·would·not·be·given·an·appropriate
3157 entity·to·filter·from,·in·the·case·where·a·“secondary”·table·were·present3149 entity·to·filter·from,·in·the·case·where·a·“secondary”·table·were·present
3158 in·the·relationship·being·queried·and·the·mapping·were·against·something3150 in·the·relationship·being·queried·and·the·mapping·were·against·something
3159 complex·such·as·a·“with·polymorphic”.</p>3151 complex·such·as·a·“with·polymorphic”.</p>
3160 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7868">#7868</a></p>3152 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7868">#7868</a></p>
3161 </p>3153 </p>
3162 </li>3154 </li>
3163 <li><p·class="caption"·id="change-1.4.33-4"><span·class="target"·id="change-4964a00cd636f3fbb10595151e1fb258"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4964a00cd636f3fbb10595151e1fb258">¶</a></span><p>Fixed·bug·where·<a·class="reference·internal"·href="../orm/composites.html#sqlalchemy.orm.composite"·title="sqlalchemy.orm.composite"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">composite()</span></code></a>·attributes·would·not·work·in3155 <li><p·class="caption"·id="change-1.4.33-3"><span·class="target"·id="change-4964a00cd636f3fbb10595151e1fb258"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4964a00cd636f3fbb10595151e1fb258">¶</a></span><p>Fixed·bug·where·<a·class="reference·internal"·href="../orm/composites.html#sqlalchemy.orm.composite"·title="sqlalchemy.orm.composite"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">composite()</span></code></a>·attributes·would·not·work·in
3164 conjunction·with·the·<a·class="reference·internal"·href="../orm/queryguide/inheritance.html#sqlalchemy.orm.selectin_polymorphic"·title="sqlalchemy.orm.selectin_polymorphic"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">selectin_polymorphic()</span></code></a>·loader·strategy·for3156 conjunction·with·the·<a·class="reference·internal"·href="../orm/queryguide/inheritance.html#sqlalchemy.orm.selectin_polymorphic"·title="sqlalchemy.orm.selectin_polymorphic"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">selectin_polymorphic()</span></code></a>·loader·strategy·for
3165 joined·table·inheritance.</p>3157 joined·table·inheritance.</p>
3166 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7801">#7801</a></p>3158 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7801">#7801</a></p>
3167 </p>3159 </p>
3168 </li>3160 </li>
 3161 <li><p·class="caption"·id="change-1.4.33-4"><span·class="target"·id="change-9e8374aab257ac3366e02a4907fc449a"><strong>[orm]·[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-9e8374aab257ac3366e02a4907fc449a">¶</a></span><p>Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of
 3162 intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an
 3163 expression·object·is·created.·These·clones·have·been·greatly·reduced,
 3164 reducing·the·number·of·total·expression·objects·stored·in·memory·by
 3165 ORM·mappings·by·about·30%.</p>
 3166 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7823">#7823</a></p>
 3167 </p>
 3168 </li>
3169 <li><p·class="caption"·id="change-1.4.33-5"><span·class="target"·id="change-cd2db57c1e1cd1330ba16d255c704a3d"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-cd2db57c1e1cd1330ba16d255c704a3d">¶</a></span><p>Fixed·issue·where·the·<a·class="reference·internal"·href="../orm/queryguide/inheritance.html#sqlalchemy.orm.selectin_polymorphic"·title="sqlalchemy.orm.selectin_polymorphic"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">selectin_polymorphic()</span></code></a>·loader·option·would3169 <li><p·class="caption"·id="change-1.4.33-5"><span·class="target"·id="change-cd2db57c1e1cd1330ba16d255c704a3d"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-cd2db57c1e1cd1330ba16d255c704a3d">¶</a></span><p>Fixed·issue·where·the·<a·class="reference·internal"·href="../orm/queryguide/inheritance.html#sqlalchemy.orm.selectin_polymorphic"·title="sqlalchemy.orm.selectin_polymorphic"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">selectin_polymorphic()</span></code></a>·loader·option·would
3170 not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed3170 not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed
3171 “polymorphic_on”·column.···Additionally·added·test·support·for·a·wider3171 “polymorphic_on”·column.···Additionally·added·test·support·for·a·wider
3172 variety·of·usage·patterns·with·this·construct.</p>3172 variety·of·usage·patterns·with·this·construct.</p>
3173 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7799">#7799</a></p>3173 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7799">#7799</a></p>
3174 </p>3174 </p>
3175 </li>3175 </li>
Offset 4896, 15 lines modifiedOffset 4896, 15 lines modified
4896 </p>4896 </p>
4897 </li>4897 </li>
4898 </ul>4898 </ul>
4899 </section>4899 </section>
4900 <section·id="change-1.4.24-oracle">4900 <section·id="change-1.4.24-oracle">
4901 <h3>oracle<a·class="headerlink"·href="#change-1.4.24-oracle"·title="Link·to·this·heading">¶</a></h3>4901 <h3>oracle<a·class="headerlink"·href="#change-1.4.24-oracle"·title="Link·to·this·heading">¶</a></h3>
4902 <ul·class="simple">4902 <ul·class="simple">
4903 <li><p·class="caption"·id="change-1.4.24-26"><span·class="target"·id="change-52e239f85c12b1dda3a1f0ff8b1b7760"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-52e239f85c12b1dda3a1f0ff8b1b7760">¶</a></span><p>Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other4903 <li><p·class="caption"·id="change-1.4.24-26"><span·class="target"·id="change-52e239f85c12b1dda3a1f0ff8b1b7760"><strong>[oracle]·[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-52e239f85c12b1dda3a1f0ff8b1b7760">¶</a></span><p>Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other
4904 DDL-name·parameters·as·used·in·reflection·queries·against·Oracle·system4904 DDL-name·parameters·as·used·in·reflection·queries·against·Oracle·system
4905 views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable4905 views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable
4906 indexing·to·take·place·against·these·columns,·as·they·previously·would·be4906 indexing·to·take·place·against·these·columns,·as·they·previously·would·be
4907 implicitly·handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;4907 implicitly·handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;
4908 these·columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with4908 these·columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with
4909 lengths·varying·from·30·to·128·characters·depending·on·server·version.4909 lengths·varying·from·30·to·128·characters·depending·on·server·version.
4910 Additionally,·test·support·has·been·enabled·for·Unicode-named·DDL4910 Additionally,·test·support·has·been·enabled·for·Unicode-named·DDL
Offset 5619, 24 lines modifiedOffset 5619, 15 lines modified
5619 </section>5619 </section>
5620 </section>5620 </section>
5621 <section·id="change-1.4.18">5621 <section·id="change-1.4.18">
5622 <h2·class="release-version">1.4.18<a·class="headerlink"·href="#change-1.4.18"·title="Link·to·this·heading">¶</a></h2>5622 <h2·class="release-version">1.4.18<a·class="headerlink"·href="#change-1.4.18"·title="Link·to·this·heading">¶</a></h2>
5623 Released:·June·10,·2021<section·id="change-1.4.18-orm">5623 Released:·June·10,·2021<section·id="change-1.4.18-orm">
5624 <h3>orm<a·class="headerlink"·href="#change-1.4.18-orm"·title="Link·to·this·heading">¶</a></h3>5624 <h3>orm<a·class="headerlink"·href="#change-1.4.18-orm"·title="Link·to·this·heading">¶</a></h3>
5625 <ul·class="simple">5625 <ul·class="simple">
5626 <li><p·class="caption"·id="change-1.4.18-0"><span·class="target"·id="change-c44bef7c81e356405fc8438d62ed6fb2"><strong>[orm]·[performance]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-c44bef7c81e356405fc8438d62ed6fb2">¶</a></span><p>Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped·column 
5627 to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly 
5628 more·expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to 
5629 some·logic·that·was·removed·since·1.3.·The·issue·could·also·cause 
5630 deprecation·warnings·involving·column·resolution·to·be·emitted·when·using·a 
5631 1.4·style·query·with·joined·eager·loading.</p> 
5632 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6596">#6596</a></p> 
5633 </p> 
5634 </li> 
5635 <li><p·class="caption"·id="change-1.4.18-1"><span·class="target"·id="change-bbc62687df1511016980bc3701009b8b"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-bbc62687df1511016980bc3701009b8b">¶</a></span><p>Clarified·the·current·purpose·of·the5626 <li><p·class="caption"·id="change-1.4.18-0"><span·class="target"·id="change-bbc62687df1511016980bc3701009b8b"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-bbc62687df1511016980bc3701009b8b">¶</a></span><p>Clarified·the·current·purpose·of·the
5636 <a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship.params.bake_queries"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-paramref·docutils·literal·notranslate"><span·class="pre">relationship.bake_queries</span></code></a>·flag,·which·in·1.4·is·to·enable5627 <a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship.params.bake_queries"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-paramref·docutils·literal·notranslate"><span·class="pre">relationship.bake_queries</span></code></a>·flag,·which·in·1.4·is·to·enable
5637 or·disable·“lambda·caching”·of·statements·within·the·“lazyload”·and5628 or·disable·“lambda·caching”·of·statements·within·the·“lazyload”·and
5638 “selectinload”·loader·strategies;·this·is·separate·from·the·more5629 “selectinload”·loader·strategies;·this·is·separate·from·the·more
5639 foundational·SQL·query·cache·that·is·used·for·most·statements.5630 foundational·SQL·query·cache·that·is·used·for·most·statements.
5640 Additionally,·the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one5631 Additionally,·the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one
5641 SQL·queries,·which·was·an·implementation·quirk·that·doesn’t·exist·for·any5632 SQL·queries,·which·was·an·implementation·quirk·that·doesn’t·exist·for·any
5642 other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader5633 other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader
Offset 5646, 29 lines modifiedOffset 5637, 38 lines modified
5646 setting·<code·class="docutils·literal·notranslate"><span·class="pre">bake_queries=False</span></code>·for·such·a·relationship·will·remove·this5637 setting·<code·class="docutils·literal·notranslate"><span·class="pre">bake_queries=False</span></code>·for·such·a·relationship·will·remove·this
5647 cache·from·being·used,·there’s·no·particular·performance·gain·in·this·case5638 cache·from·being·used,·there’s·no·particular·performance·gain·in·this·case
5648 as·using·no·caching·vs.·using·a·cache·that·needs·to·refresh·often·likely5639 as·using·no·caching·vs.·using·a·cache·that·needs·to·refresh·often·likely
5649 still·wins·out·on·the·caching·being·used·side.</p>5640 still·wins·out·on·the·caching·being·used·side.</p>
5650 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6072">#6072</a>,·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6487">#6487</a></p>5641 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6072">#6072</a>,·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6487">#6487</a></p>
5651 </p>5642 </p>
5652 </li>5643 </li>
5653 <li><p·class="caption"·id="change-1.4.18-2"><span·class="target"·id="change-d2695c12943f278ad9d30faa9fb3f801"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-d2695c12943f278ad9d30faa9fb3f801">¶</a></span><p>Adjusted·the·means·by·which·classes·such·as·<a·class="reference·internal"·href="../orm/contextual.html#sqlalchemy.orm.scoped_session"·title="sqlalchemy.orm.scoped_session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">scoped_session</span></code></a>5644 <li><p·class="caption"·id="change-1.4.18-1"><span·class="target"·id="change-d2695c12943f278ad9d30faa9fb3f801"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-d2695c12943f278ad9d30faa9fb3f801">¶</a></span><p>Adjusted·the·means·by·which·classes·such·as·<a·class="reference·internal"·href="../orm/contextual.html#sqlalchemy.orm.scoped_session"·title="sqlalchemy.orm.scoped_session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">scoped_session</span></code></a>
5654 and·<a·class="reference·internal"·href="../orm/extensions/asyncio.html#sqlalchemy.ext.asyncio.AsyncSession"·title="sqlalchemy.ext.asyncio.AsyncSession"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code></a>·are·generated·from·the·base5645 and·<a·class="reference·internal"·href="../orm/extensions/asyncio.html#sqlalchemy.ext.asyncio.AsyncSession"·title="sqlalchemy.ext.asyncio.AsyncSession"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code></a>·are·generated·from·the·base
5655 <a·class="reference·internal"·href="../orm/session_api.html#sqlalchemy.orm.Session"·title="sqlalchemy.orm.Session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Session</span></code></a>·class,·such·that·custom·<a·class="reference·internal"·href="../orm/session_api.html#sqlalchemy.orm.Session"·title="sqlalchemy.orm.Session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Session</span></code></a>5646 <a·class="reference·internal"·href="../orm/session_api.html#sqlalchemy.orm.Session"·title="sqlalchemy.orm.Session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Session</span></code></a>·class,·such·that·custom·<a·class="reference·internal"·href="../orm/session_api.html#sqlalchemy.orm.Session"·title="sqlalchemy.orm.Session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Session</span></code></a>
5656 subclasses·such·as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement5647 subclasses·such·as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement
5657 positional·arguments·when·they·call·into·the·superclass·method,·and·can5648 positional·arguments·when·they·call·into·the·superclass·method,·and·can
5658 continue·using·the·same·argument·styles·as·in·previous·releases.</p>5649 continue·using·the·same·argument·styles·as·in·previous·releases.</p>
5659 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6285">#6285</a></p>5650 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6285">#6285</a></p>
5660 </p>5651 </p>
5661 </li>5652 </li>
5662 <li><p·class="caption"·id="change-1.4.18-3"><span·class="target"·id="change-f63c401b2709ae6721b787d7eda1a013"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-f63c401b2709ae6721b787d7eda1a013">¶</a></span><p>Fixed·issue·where·query·production·for·joinedload·against·a·complex·left5653 <li><p·class="caption"·id="change-1.4.18-2"><span·class="target"·id="change-f63c401b2709ae6721b787d7eda1a013"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-f63c401b2709ae6721b787d7eda1a013">¶</a></span><p>Fixed·issue·where·query·production·for·joinedload·against·a·complex·left
5663 hand·side·involving·joined-table·inheritance·could·fail·to·produce·a5654 hand·side·involving·joined-table·inheritance·could·fail·to·produce·a
5664 correct·query,·due·to·a·clause·adaption·issue.</p>5655 correct·query,·due·to·a·clause·adaption·issue.</p>
5665 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6595">#6595</a></p>5656 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6595">#6595</a></p>
5666 </p>5657 </p>
5667 </li>5658 </li>
 5659 <li><p·class="caption"·id="change-1.4.18-3"><span·class="target"·id="change-c44bef7c81e356405fc8438d62ed6fb2"><strong>[orm]·[bug]·[performance]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-c44bef7c81e356405fc8438d62ed6fb2">¶</a></span><p>Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped·column
 5660 to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly
 5661 more·expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to
 5662 some·logic·that·was·removed·since·1.3.·The·issue·could·also·cause
 5663 deprecation·warnings·involving·column·resolution·to·be·emitted·when·using·a
 5664 1.4·style·query·with·joined·eager·loading.</p>
 5665 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6596">#6596</a></p>
 5666 </p>
 5667 </li>
5668 <li><p·class="caption"·id="change-1.4.18-4"><span·class="target"·id="change-1695ae48e5e4dad141529f1476931402"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-1695ae48e5e4dad141529f1476931402">¶</a></span><p>Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use5668 <li><p·class="caption"·id="change-1.4.18-4"><span·class="target"·id="change-1695ae48e5e4dad141529f1476931402"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-1695ae48e5e4dad141529f1476931402">¶</a></span><p>Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use
5669 case·where·an·error·was·raised·if·the·statement·were·against·a5669 case·where·an·error·was·raised·if·the·statement·were·against·a
5670 single-table-inheritance·subclass.</p>5670 single-table-inheritance·subclass.</p>
5671 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6591">#6591</a></p>5671 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6591">#6591</a></p>
5672 </p>5672 </p>
5673 </li>5673 </li>
5674 <li><p·class="caption"·id="change-1.4.18-5"><span·class="target"·id="change-25ff9a8e87b9a1a7c9ad8cefe9c95e05"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-25ff9a8e87b9a1a7c9ad8cefe9c95e05">¶</a></span><p>The·warning·that’s·emitted·for·<a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">relationship()</span></code></a>·when·multiple5674 <li><p·class="caption"·id="change-1.4.18-5"><span·class="target"·id="change-25ff9a8e87b9a1a7c9ad8cefe9c95e05"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-25ff9a8e87b9a1a7c9ad8cefe9c95e05">¶</a></span><p>The·warning·that’s·emitted·for·<a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">relationship()</span></code></a>·when·multiple
Offset 6512, 15 lines modifiedOffset 6512, 15 lines modified
6512 synonyms·can·be·established·linking·to·these·constructs·which·work6512 synonyms·can·be·established·linking·to·these·constructs·which·work
6513 fully.···This·is·a·behavior·that·was·semi-explicitly·disallowed·previously,6513 fully.···This·is·a·behavior·that·was·semi-explicitly·disallowed·previously,
Max diff block lines reached; 6433/22758 bytes (28.27%) of diff not shown.
13.1 KB
html2text {}
    
Offset 2084, 31 lines modifiedOffset 2084, 31 lines modified
2084 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x82084 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8
2085 Added·new·attributes·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e_\x8B_\x8a_\x8s_\x8e_\x8._\x8r_\x8e_\x8t_\x8u_\x8r_\x8n_\x8i_\x8n_\x8g_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s·and2085 Added·new·attributes·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e_\x8B_\x8a_\x8s_\x8e_\x8._\x8r_\x8e_\x8t_\x8u_\x8r_\x8n_\x8i_\x8n_\x8g_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s·and
2086 _\x8U_\x8p_\x8d_\x8a_\x8t_\x8e_\x8B_\x8a_\x8s_\x8e_\x8._\x8e_\x8n_\x8t_\x8i_\x8t_\x8y_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n·to·allow·for·inspection·of·ORM·attributes·and2086 _\x8U_\x8p_\x8d_\x8a_\x8t_\x8e_\x8B_\x8a_\x8s_\x8e_\x8._\x8e_\x8n_\x8t_\x8i_\x8t_\x8y_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n·to·allow·for·inspection·of·ORM·attributes·and
2087 entities·that·are·installed·as·part·of·an·_\x8I_\x8n_\x8s_\x8e_\x8r_\x8t,·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e,·or·_\x8D_\x8e_\x8l_\x8e_\x8t_\x8e·construct.2087 entities·that·are·installed·as·part·of·an·_\x8I_\x8n_\x8s_\x8e_\x8r_\x8t,·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e,·or·_\x8D_\x8e_\x8l_\x8e_\x8t_\x8e·construct.
2088 The·_\x8S_\x8e_\x8l_\x8e_\x8c_\x8t_\x8._\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s·accessor·is·also·now·implemented·for·Core-only2088 The·_\x8S_\x8e_\x8l_\x8e_\x8c_\x8t_\x8._\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8__\x8d_\x8e_\x8s_\x8c_\x8r_\x8i_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s·accessor·is·also·now·implemented·for·Core-only
2089 selectables.2089 selectables.
2090 References:·_\x8#_\x87_\x88_\x86_\x812090 References:·_\x8#_\x87_\x88_\x86_\x81
2091 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8 
2092 Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of 
2093 intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an 
2094 expression·object·is·created.·These·clones·have·been·greatly·reduced,·reducing 
2095 the·number·of·total·expression·objects·stored·in·memory·by·ORM·mappings·by 
2096 about·30%. 
2097 References:·_\x8#_\x87_\x88_\x82_\x83 
2098 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x82091 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
2099 Fixed·regression·in·“dynamic”·loader·strategy·where·the·_\x8Q_\x8u_\x8e_\x8r_\x8y_\x8._\x8f_\x8i_\x8l_\x8t_\x8e_\x8r_\x8__\x8b_\x8y_\x8(_\x8)2092 Fixed·regression·in·“dynamic”·loader·strategy·where·the·_\x8Q_\x8u_\x8e_\x8r_\x8y_\x8._\x8f_\x8i_\x8l_\x8t_\x8e_\x8r_\x8__\x8b_\x8y_\x8(_\x8)
2100 method·would·not·be·given·an·appropriate·entity·to·filter·from,·in·the·case2093 method·would·not·be·given·an·appropriate·entity·to·filter·from,·in·the·case
2101 where·a·“secondary”·table·were·present·in·the·relationship·being·queried·and2094 where·a·“secondary”·table·were·present·in·the·relationship·being·queried·and
2102 the·mapping·were·against·something·complex·such·as·a·“with·polymorphic”.2095 the·mapping·were·against·something·complex·such·as·a·“with·polymorphic”.
2103 References:·_\x8#_\x87_\x88_\x86_\x882096 References:·_\x8#_\x87_\x88_\x86_\x88
2104 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x82097 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
2105 Fixed·bug·where·_\x8c_\x8o_\x8m_\x8p_\x8o_\x8s_\x8i_\x8t_\x8e_\x8(_\x8)·attributes·would·not·work·in·conjunction·with·the2098 Fixed·bug·where·_\x8c_\x8o_\x8m_\x8p_\x8o_\x8s_\x8i_\x8t_\x8e_\x8(_\x8)·attributes·would·not·work·in·conjunction·with·the
2106 _\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8__\x8p_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8(_\x8)·loader·strategy·for·joined·table·inheritance.2099 _\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8__\x8p_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8(_\x8)·loader·strategy·for·joined·table·inheritance.
2107 References:·_\x8#_\x87_\x88_\x80_\x812100 References:·_\x8#_\x87_\x88_\x80_\x81
 2101 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·_\x8
 2102 Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of
 2103 intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an
 2104 expression·object·is·created.·These·clones·have·been·greatly·reduced,·reducing
 2105 the·number·of·total·expression·objects·stored·in·memory·by·ORM·mappings·by
 2106 about·30%.
 2107 References:·_\x8#_\x87_\x88_\x82_\x83
2108 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x82108 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
2109 Fixed·issue·where·the·_\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8__\x8p_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8(_\x8)·loader·option·would·not·work·with2109 Fixed·issue·where·the·_\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8__\x8p_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8(_\x8)·loader·option·would·not·work·with
2110 joined·inheritance·mappers·that·don’t·have·a·fixed·“polymorphic_on”·column.2110 joined·inheritance·mappers·that·don’t·have·a·fixed·“polymorphic_on”·column.
2111 Additionally·added·test·support·for·a·wider·variety·of·usage·patterns·with·this2111 Additionally·added·test·support·for·a·wider·variety·of·usage·patterns·with·this
2112 construct.2112 construct.
2113 References:·_\x8#_\x87_\x87_\x89_\x892113 References:·_\x8#_\x87_\x87_\x89_\x89
2114 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x82114 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
Offset 3307, 15 lines modifiedOffset 3307, 15 lines modified
3307 ····*·[\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8ef\x8fl\x8le\x8ec\x8ct\x8ti\x8io\x8on\x8n]\x8]·_\x83307 ····*·[\x8[m\x8ms\x8ss\x8sq\x8ql\x8l]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8ef\x8fl\x8le\x8ec\x8ct\x8ti\x8io\x8on\x8n]\x8]·_\x8
3308 ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned3308 ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned
3309 ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL3309 ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL
3310 ······Server·session·(connection).·An·extra·check·is·now·performed·to·ensure3310 ······Server·session·(connection).·An·extra·check·is·now·performed·to·ensure
3311 ······that·the·temp·table·detected·is·in·fact·owned·by·the·current·session.3311 ······that·the·temp·table·detected·is·in·fact·owned·by·the·current·session.
3312 ······References:·_\x8#_\x86_\x89_\x81_\x803312 ······References:·_\x8#_\x86_\x89_\x81_\x80
3313 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*3313 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
3314 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·_\x83314 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·_\x8
3315 ······Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other·DDL-3315 ······Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other·DDL-
3316 ······name·parameters·as·used·in·reflection·queries·against·Oracle·system·views3316 ······name·parameters·as·used·in·reflection·queries·against·Oracle·system·views
3317 ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to3317 ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to
3318 ······take·place·against·these·columns,·as·they·previously·would·be·implicitly3318 ······take·place·against·these·columns,·as·they·previously·would·be·implicitly
3319 ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these3319 ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these
3320 ······columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with3320 ······columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with
3321 ······lengths·varying·from·30·to·128·characters·depending·on·server·version.3321 ······lengths·varying·from·30·to·128·characters·depending·on·server·version.
Offset 3815, 50 lines modifiedOffset 3815, 51 lines modified
3815 the·INSERT·thus·triggering·SQLAlchemy’s·feature·of·setting·IDENTITY·INSERT·to3815 the·INSERT·thus·triggering·SQLAlchemy’s·feature·of·setting·IDENTITY·INSERT·to
3816 “on”;·it’s·in·this·directive·where·the·schema·translate·map·would·fail·to·be3816 “on”;·it’s·in·this·directive·where·the·schema·translate·map·would·fail·to·be
3817 honored.3817 honored.
3818 References:·_\x8#_\x86_\x86_\x85_\x883818 References:·_\x8#_\x86_\x86_\x85_\x88
3819 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.4\x84.\x8.1\x818\x88_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*3819 *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.4\x84.\x8.1\x818\x88_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*
3820 Released:·June·10,·20213820 Released:·June·10,·2021
3821 *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8·*\x8**\x8**\x8**\x8*3821 *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8·*\x8**\x8**\x8**\x8*
3822 ····*·[\x8[o\x8or\x8rm\x8m]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8 
3823 ······Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped 
3824 ······column·to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a 
3825 ······slightly·more·expensive·“fallback”·could·take·place·to·set·up·this 
3826 ······resolution·due·to·some·logic·that·was·removed·since·1.3.·The·issue·could 
3827 ······also·cause·deprecation·warnings·involving·column·resolution·to·be·emitted 
3828 ······when·using·a·1.4·style·query·with·joined·eager·loading. 
3829 ······References:·_\x8#_\x86_\x85_\x89_\x86 
3830 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x83822 ····*·[\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
3831 Clarified·the·current·purpose·of·the·_.r_.e_.l_.a_.t_.i_.o_.n_.s_.h_.i_.p_.._.b_.a_.k_.e_.__.q_.u_.e_.r_.i_.e_.s·flag,·which·in3823 ······Clarified·the·current·purpose·of·the·_.r_.e_.l_.a_.t_.i_.o_.n_.s_.h_.i_.p_.._.b_.a_.k_.e_.__.q_.u_.e_.r_.i_.e_.s·flag,
3832 1.4·is·to·enable·or·disable·“lambda·caching”·of·statements·within·the3824 ······which·in·1.4·is·to·enable·or·disable·“lambda·caching”·of·statements
3833 “lazyload”·and·“selectinload”·loader·strategies;·this·is·separate·from·the·more 
3834 foundational·SQL·query·cache·that·is·used·for·most·statements.·Additionally, 
3835 the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one·SQL·queries,·which 
3836 was·an·implementation·quirk·that·doesn’t·exist·for·any·other·loader·scenario. 
3837 Finally,·the·“lru·cache”·warning·that·the·lazyloader·and·selectinloader 
3838 strategies·could·emit·when·handling·a·wide·array·of·class/relationship3825 ······within·the·“lazyload”·and·“selectinload·loader·strategies;·this·is
 3826 ······separate·from·the·more·foundational·SQL·query·cache·that·is·used·for·most
 3827 ······statements.·Additionally,·the·lazy·loader·no·longer·uses·its·own·cache
 3828 ······for·many-to-one·SQL·queries,·which·was·an·implementation·quirk·that
 3829 ······doesn’t·exist·for·any·other·loader·scenario.·Finally,·the·“lru·cache”
 3830 ······warning·that·the·lazyloader·and·selectinloader·strategies·could·emit·when
 3831 ······handling·a·wide·array·of·class/relationship·combinations·has·been
3839 combinations·has·been·removed;·based·on·analysis·of·some·end-user·cases,·this3832 ······removed;·based·on·analysis·of·some·end-user·cases,·this·warning·doesn’t
3840 warning·doesn’t·suggest·any·significant·issue.·While·setting·bake_queries=False3833 ······suggest·any·significant·issue.·While·setting·bake_queries=False·for·such
3841 for·such·a·relationship·will·remove·this·cache·from·being·used,·there’s·no3834 ······a·relationship·will·remove·this·cache·from·being·used,·there’s·no
3842 particular·performance·gain·in·this·case·as·using·no·caching·vs.·using·a·cache3835 ······particular·performance·gain·in·this·case·as·using·no·caching·vs.·using·a
3843 that·needs·to·refresh·often·likely·still·wins·out·on·the·caching·being·used3836 ······cache·that·needs·to·refresh·often·likely·still·wins·out·on·the·caching
3844 side.3837 ······being·used·side.
3845 References:·_\x8#_\x86_\x80_\x87_\x82,·_\x8#_\x86_\x84_\x88_\x873838 ······References:·_\x8#_\x86_\x80_\x87_\x82,·_\x8#_\x86_\x84_\x88_\x87
3846 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x83839 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
3847 Adjusted·the·means·by·which·classes·such·as·_\x8s_\x8c_\x8o_\x8p_\x8e_\x8d_\x8__\x8s_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·and·_\x8A_\x8s_\x8y_\x8n_\x8c_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·are3840 Adjusted·the·means·by·which·classes·such·as·_\x8s_\x8c_\x8o_\x8p_\x8e_\x8d_\x8__\x8s_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·and·_\x8A_\x8s_\x8y_\x8n_\x8c_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·are
3848 generated·from·the·base·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·class,·such·that·custom·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·subclasses·such3841 generated·from·the·base·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·class,·such·that·custom·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·subclasses·such
3849 as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement·positional·arguments3842 as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement·positional·arguments
3850 when·they·call·into·the·superclass·method,·and·can·continue·using·the·same3843 when·they·call·into·the·superclass·method,·and·can·continue·using·the·same
3851 argument·styles·as·in·previous·releases.3844 argument·styles·as·in·previous·releases.
3852 References:·_\x8#_\x86_\x82_\x88_\x853845 References:·_\x8#_\x86_\x82_\x88_\x85
3853 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x83846 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
3854 Fixed·issue·where·query·production·for·joinedload·against·a·complex·left·hand3847 Fixed·issue·where·query·production·for·joinedload·against·a·complex·left·hand
3855 side·involving·joined-table·inheritance·could·fail·to·produce·a·correct·query,3848 side·involving·joined-table·inheritance·could·fail·to·produce·a·correct·query,
3856 due·to·a·clause·adaption·issue.3849 due·to·a·clause·adaption·issue.
3857 References:·_\x8#_\x86_\x85_\x89_\x853850 References:·_\x8#_\x86_\x85_\x89_\x85
 3851 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
 3852 Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped·column·to·a
 3853 result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly·more
 3854 expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to·some
 3855 logic·that·was·removed·since·1.3.·The·issue·could·also·cause·deprecation
 3856 warnings·involving·column·resolution·to·be·emitted·when·using·a·1.4·style·query
 3857 with·joined·eager·loading.
 3858 References:·_\x8#_\x86_\x85_\x89_\x86
3858 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x83859 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
3859 Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use·case3860 Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use·case
3860 where·an·error·was·raised·if·the·statement·were·against·a·single-table-3861 where·an·error·was·raised·if·the·statement·were·against·a·single-table-
3861 inheritance·subclass.3862 inheritance·subclass.
3862 References:·_\x8#_\x86_\x85_\x89_\x813863 References:·_\x8#_\x86_\x85_\x89_\x81
3863 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x83864 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
3864 The·warning·that’s·emitted·for·_\x8r_\x8e_\x8l_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s_\x8h_\x8i_\x8p_\x8(_\x8)·when·multiple·relationships·would3865 The·warning·that’s·emitted·for·_\x8r_\x8e_\x8l_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s_\x8h_\x8i_\x8p_\x8(_\x8)·when·multiple·relationships·would
Offset 4428, 15 lines modifiedOffset 4429, 15 lines modified
4428 ······Established·support·for·synoynm()·in·conjunction·with·hybrid·property,4429 ······Established·support·for·synoynm()·in·conjunction·with·hybrid·property,
4429 ······assocaitionproxy·is·set·up·completely,·including·that·synonyms·can·be4430 ······assocaitionproxy·is·set·up·completely,·including·that·synonyms·can·be
4430 ······established·linking·to·these·constructs·which·work·fully.·This·is·a4431 ······established·linking·to·these·constructs·which·work·fully.·This·is·a
4431 ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it4432 ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it
4432 ······did·not·fail·in·every·scenario,·explicit·support·for·assoc·proxy·and4433 ······did·not·fail·in·every·scenario,·explicit·support·for·assoc·proxy·and
4433 ······hybrids·has·been·added.4434 ······hybrids·has·been·added.
4434 ······References:·_\x8#_\x86_\x82_\x86_\x874435 ······References:·_\x8#_\x86_\x82_\x86_\x87
Max diff block lines reached; 3529/13354 bytes (26.43%) of diff not shown.
32.1 KB
./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_20.html
    
Offset 2623, 32 lines modifiedOffset 2623, 32 lines modified
2623 </section>2623 </section>
2624 </section>2624 </section>
2625 <section·id="change-2.0.28">2625 <section·id="change-2.0.28">
2626 <h2·class="release-version">2.0.28<a·class="headerlink"·href="#change-2.0.28"·title="Link·to·this·heading">¶</a></h2>2626 <h2·class="release-version">2.0.28<a·class="headerlink"·href="#change-2.0.28"·title="Link·to·this·heading">¶</a></h2>
2627 Released:·March·4,·2024<section·id="change-2.0.28-orm">2627 Released:·March·4,·2024<section·id="change-2.0.28-orm">
2628 <h3>orm<a·class="headerlink"·href="#change-2.0.28-orm"·title="Link·to·this·heading">¶</a></h3>2628 <h3>orm<a·class="headerlink"·href="#change-2.0.28-orm"·title="Link·to·this·heading">¶</a></h3>
2629 <ul·class="simple">2629 <ul·class="simple">
 2630 <li><p·class="caption"·id="change-2.0.28-0"><span·class="target"·id="change-ca93d357e1ca5e34cc36df2518a3264f"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ca93d357e1ca5e34cc36df2518a3264f">¶</a></span><p>Fixed·regression·caused·by·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/9779">#9779</a>·where·using·the·“secondary”·table
 2631 in·a·relationship·<code·class="docutils·literal·notranslate"><span·class="pre">and_()</span></code>·expression·would·fail·to·be·aliased·to·match
 2632 how·the·“secondary”·table·normally·renders·within·a
 2633 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.Select.join"·title="sqlalchemy.sql.expression.Select.join"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">Select.join()</span></code></a>·expression,·leading·to·an·invalid·query.</p>
 2634 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11010">#11010</a></p>
 2635 </p>
 2636 </li>
2630 <li><p·class="caption"·id="change-2.0.28-0"><span·class="target"·id="change-ac3f7e555f345c82b2b07b34069c7489"><strong>[orm]·[performance]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ac3f7e555f345c82b2b07b34069c7489">¶</a></span><p>Adjusted·the·fix·made·in·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10570">#10570</a>,·released·in·2.0.23,·where·new2637 <li><p·class="caption"·id="change-2.0.28-1"><span·class="target"·id="change-ac3f7e555f345c82b2b07b34069c7489"><strong>[orm]·[bug]·[performance]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ac3f7e555f345c82b2b07b34069c7489">¶</a></span><p>Adjusted·the·fix·made·in·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10570">#10570</a>,·released·in·2.0.23,·where·new
2631 logic·was·added·to·reconcile·possibly·changing·bound·parameter·values2638 logic·was·added·to·reconcile·possibly·changing·bound·parameter·values
2632 across·cache·key·generations·used·within·the·<a·class="reference·internal"·href="../orm/queryguide/columns.html#sqlalchemy.orm.with_expression"·title="sqlalchemy.orm.with_expression"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">with_expression()</span></code></a>2639 across·cache·key·generations·used·within·the·<a·class="reference·internal"·href="../orm/queryguide/columns.html#sqlalchemy.orm.with_expression"·title="sqlalchemy.orm.with_expression"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">with_expression()</span></code></a>
2633 construct.··The·new·logic·changes·the·approach·by·which·the·new·bound2640 construct.··The·new·logic·changes·the·approach·by·which·the·new·bound
2634 parameter·values·are·associated·with·the·statement,·avoiding·the·need·to2641 parameter·values·are·associated·with·the·statement,·avoiding·the·need·to
2635 deep-copy·the·statement·which·can·result·in·a·significant·performance2642 deep-copy·the·statement·which·can·result·in·a·significant·performance
2636 penalty·for·very·deep·/·complex·SQL·constructs.··The·new·approach·no·longer2643 penalty·for·very·deep·/·complex·SQL·constructs.··The·new·approach·no·longer
2637 requires·this·deep-copy·step.</p>2644 requires·this·deep-copy·step.</p>
2638 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11085">#11085</a></p>2645 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11085">#11085</a></p>
2639 </p>2646 </p>
2640 </li>2647 </li>
2641 <li><p·class="caption"·id="change-2.0.28-1"><span·class="target"·id="change-ca93d357e1ca5e34cc36df2518a3264f"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ca93d357e1ca5e34cc36df2518a3264f">¶</a></span><p>Fixed·regression·caused·by·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/9779">#9779</a>·where·using·the·“secondary”·table 
2642 in·a·relationship·<code·class="docutils·literal·notranslate"><span·class="pre">and_()</span></code>·expression·would·fail·to·be·aliased·to·match 
2643 how·the·“secondary”·table·normally·renders·within·a 
2644 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.Select.join"·title="sqlalchemy.sql.expression.Select.join"><code·class="xref·py·py-meth·docutils·literal·notranslate"><span·class="pre">Select.join()</span></code></a>·expression,·leading·to·an·invalid·query.</p> 
2645 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11010">#11010</a></p> 
2646 </p> 
2647 </li> 
2648 </ul>2648 </ul>
2649 </section>2649 </section>
2650 <section·id="change-2.0.28-engine">2650 <section·id="change-2.0.28-engine">
2651 <h3>engine<a·class="headerlink"·href="#change-2.0.28-engine"·title="Link·to·this·heading">¶</a></h3>2651 <h3>engine<a·class="headerlink"·href="#change-2.0.28-engine"·title="Link·to·this·heading">¶</a></h3>
2652 <ul·class="simple">2652 <ul·class="simple">
2653 <li><p·class="caption"·id="change-2.0.28-2"><span·class="target"·id="change-b606388dd30614a5fe35a7de2b6c8c6f"><strong>[engine]·[usecase]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-b606388dd30614a5fe35a7de2b6c8c6f">¶</a></span><p>Added·new·core·execution·option2653 <li><p·class="caption"·id="change-2.0.28-2"><span·class="target"·id="change-b606388dd30614a5fe35a7de2b6c8c6f"><strong>[engine]·[usecase]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-b606388dd30614a5fe35a7de2b6c8c6f">¶</a></span><p>Added·new·core·execution·option
2654 <a·class="reference·internal"·href="../core/connections.html#sqlalchemy.engine.Connection.execution_options.params.preserve_rowcount"·title="sqlalchemy.engine.Connection.execution_options"><code·class="xref·py·py-paramref·docutils·literal·notranslate"><span·class="pre">Connection.execution_options.preserve_rowcount</span></code></a>.·When2654 <a·class="reference·internal"·href="../core/connections.html#sqlalchemy.engine.Connection.execution_options.params.preserve_rowcount"·title="sqlalchemy.engine.Connection.execution_options"><code·class="xref·py·py-paramref·docutils·literal·notranslate"><span·class="pre">Connection.execution_options.preserve_rowcount</span></code></a>.·When
Offset 2881, 15 lines modifiedOffset 2881, 15 lines modified
2881 </p>2881 </p>
2882 </li>2882 </li>
2883 </ul>2883 </ul>
2884 </section>2884 </section>
2885 <section·id="change-2.0.26-oracle">2885 <section·id="change-2.0.26-oracle">
2886 <h3>oracle<a·class="headerlink"·href="#change-2.0.26-oracle"·title="Link·to·this·heading">¶</a></h3>2886 <h3>oracle<a·class="headerlink"·href="#change-2.0.26-oracle"·title="Link·to·this·heading">¶</a></h3>
2887 <ul·class="simple">2887 <ul·class="simple">
2888 <li><p·class="caption"·id="change-2.0.26-17"><span·class="target"·id="change-2f52e064b693a9bdcdced00a0086ec1c"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-2f52e064b693a9bdcdced00a0086ec1c">¶</a></span><p>Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value·set2888 <li><p·class="caption"·id="change-2.0.26-17"><span·class="target"·id="change-2f52e064b693a9bdcdced00a0086ec1c"><strong>[oracle]·[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-2f52e064b693a9bdcdced00a0086ec1c">¶</a></span><p>Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value·set
2889 by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both2889 by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both
2890 cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.·The2890 cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.·The
2891 setting·of·50·could·cause·significant·performance·regressions·compared·to2891 setting·of·50·could·cause·significant·performance·regressions·compared·to
2892 when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of·rows·over2892 when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of·rows·over
2893 slower·networks.</p>2893 slower·networks.</p>
2894 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10877">#10877</a></p>2894 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10877">#10877</a></p>
2895 </p>2895 </p>
Offset 7123, 39 lines modifiedOffset 7123, 39 lines modified
7123 <a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">relationship()</span></code></a>·etc.·to·provide·for·the·Python·dataclasses7123 <a·class="reference·internal"·href="../orm/relationship_api.html#sqlalchemy.orm.relationship"·title="sqlalchemy.orm.relationship"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">relationship()</span></code></a>·etc.·to·provide·for·the·Python·dataclasses
7124 <code·class="docutils·literal·notranslate"><span·class="pre">compare</span></code>·parameter·on·<code·class="docutils·literal·notranslate"><span·class="pre">field()</span></code>,·when·using·the7124 <code·class="docutils·literal·notranslate"><span·class="pre">compare</span></code>·parameter·on·<code·class="docutils·literal·notranslate"><span·class="pre">field()</span></code>,·when·using·the
7125 <a·class="reference·internal"·href="../orm/dataclasses.html#orm-declarative-native-dataclasses"><span·class="std·std-ref">Declarative·Dataclass·Mapping</span></a>·feature.·Pull·request·courtesy7125 <a·class="reference·internal"·href="../orm/dataclasses.html#orm-declarative-native-dataclasses"><span·class="std·std-ref">Declarative·Dataclass·Mapping</span></a>·feature.·Pull·request·courtesy
7126 Simon·Schiele.</p>7126 Simon·Schiele.</p>
7127 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8905">#8905</a></p>7127 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8905">#8905</a></p>
7128 </p>7128 </p>
7129 </li>7129 </li>
7130 <li><p·class="caption"·id="change-2.0.0b4-3"><span·class="target"·id="change-07f17a72e4306f956d2c45a0a711d34c"><strong>[orm]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-07f17a72e4306f956d2c45a0a711d34c">¶</a></span><p>Additional·performance·enhancements·within·ORM-enabled·SQL·statements, 
7131 specifically·targeting·callcounts·within·the·construction·of·ORM 
7132 statements,·using·combinations·of·<a·class="reference·internal"·href="../orm/queryguide/api.html#sqlalchemy.orm.aliased"·title="sqlalchemy.orm.aliased"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">aliased()</span></code></a>·with 
7133 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.union"·title="sqlalchemy.sql.expression.union"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">union()</span></code></a>·and·similar·“compound”·constructs,·in·addition·to·direct 
7134 performance·improvements·to·the·<code·class="docutils·literal·notranslate"><span·class="pre">corresponding_column()</span></code>·internal·method 
7135 that·is·used·heavily·by·the·ORM·by·constructs·like·<a·class="reference·internal"·href="../orm/queryguide/api.html#sqlalchemy.orm.aliased"·title="sqlalchemy.orm.aliased"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">aliased()</span></code></a>·and 
7136 similar.</p> 
7137 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8796">#8796</a></p> 
7138 </p> 
7139 </li> 
7140 <li><p·class="caption"·id="change-2.0.0b4-4"><span·class="target"·id="change-36bb3ef310ce109a6974abb1f01249b5"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-36bb3ef310ce109a6974abb1f01249b5">¶</a></span><p>Fixed·issue·where·use·of·an·unknown·datatype·within·a·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a>7130 <li><p·class="caption"·id="change-2.0.0b4-3"><span·class="target"·id="change-36bb3ef310ce109a6974abb1f01249b5"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-36bb3ef310ce109a6974abb1f01249b5">¶</a></span><p>Fixed·issue·where·use·of·an·unknown·datatype·within·a·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a>
7141 annotation·for·a·column-based·attribute·would·silently·fail·to·map·the7131 annotation·for·a·column-based·attribute·would·silently·fail·to·map·the
7142 attribute,·rather·than·reporting·an·exception;·an·informative·exception7132 attribute,·rather·than·reporting·an·exception;·an·informative·exception
7143 message·is·now·raised.</p>7133 message·is·now·raised.</p>
7144 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8888">#8888</a></p>7134 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8888">#8888</a></p>
7145 </p>7135 </p>
7146 </li>7136 </li>
7147 <li><p·class="caption"·id="change-2.0.0b4-5"><span·class="target"·id="change-8f97eef21ad80d54b13f789e3be204fc"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-8f97eef21ad80d54b13f789e3be204fc">¶</a></span><p>Fixed·a·suite·of·issues·involving·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a>·use·with·dictionary7137 <li><p·class="caption"·id="change-2.0.0b4-4"><span·class="target"·id="change-8f97eef21ad80d54b13f789e3be204fc"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-8f97eef21ad80d54b13f789e3be204fc">¶</a></span><p>Fixed·a·suite·of·issues·involving·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a>·use·with·dictionary
7148 types,·such·as·<code·class="docutils·literal·notranslate"><span·class="pre">Mapped[Dict[str,</span>·<span·class="pre">str]</span>·<span·class="pre">|</span>·<span·class="pre">None]</span></code>,·would·not·be·correctly7138 types,·such·as·<code·class="docutils·literal·notranslate"><span·class="pre">Mapped[Dict[str,</span>·<span·class="pre">str]</span>·<span·class="pre">|</span>·<span·class="pre">None]</span></code>,·would·not·be·correctly
7149 interpreted·in·Declarative·ORM·mappings.·Support·to·correctly7139 interpreted·in·Declarative·ORM·mappings.·Support·to·correctly
7150 “de-optionalize”·this·type·including·for·lookup·in·<code·class="docutils·literal·notranslate"><span·class="pre">type_annotation_map</span></code>7140 “de-optionalize”·this·type·including·for·lookup·in·<code·class="docutils·literal·notranslate"><span·class="pre">type_annotation_map</span></code>
7151 has·been·fixed.</p>7141 has·been·fixed.</p>
7152 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8777">#8777</a></p>7142 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8777">#8777</a></p>
7153 </p>7143 </p>
7154 </li>7144 </li>
 7145 <li><p·class="caption"·id="change-2.0.0b4-5"><span·class="target"·id="change-07f17a72e4306f956d2c45a0a711d34c"><strong>[orm]·[bug]·[performance]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-07f17a72e4306f956d2c45a0a711d34c">¶</a></span><p>Additional·performance·enhancements·within·ORM-enabled·SQL·statements,
 7146 specifically·targeting·callcounts·within·the·construction·of·ORM
 7147 statements,·using·combinations·of·<a·class="reference·internal"·href="../orm/queryguide/api.html#sqlalchemy.orm.aliased"·title="sqlalchemy.orm.aliased"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">aliased()</span></code></a>·with
 7148 <a·class="reference·internal"·href="../core/selectable.html#sqlalchemy.sql.expression.union"·title="sqlalchemy.sql.expression.union"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">union()</span></code></a>·and·similar·“compound”·constructs,·in·addition·to·direct
 7149 performance·improvements·to·the·<code·class="docutils·literal·notranslate"><span·class="pre">corresponding_column()</span></code>·internal·method
 7150 that·is·used·heavily·by·the·ORM·by·constructs·like·<a·class="reference·internal"·href="../orm/queryguide/api.html#sqlalchemy.orm.aliased"·title="sqlalchemy.orm.aliased"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">aliased()</span></code></a>·and
 7151 similar.</p>
 7152 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8796">#8796</a></p>
 7153 </p>
 7154 </li>
7155 <li><p·class="caption"·id="change-2.0.0b4-6"><span·class="target"·id="change-e02cade6952e8afe79edf480a3932a25"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-e02cade6952e8afe79edf480a3932a25">¶</a></span><p>Fixed·bug·in·<a·class="reference·internal"·href="../orm/dataclasses.html#orm-declarative-native-dataclasses"><span·class="std·std-ref">Declarative·Dataclass·Mapping</span></a>·feature·where·using7155 <li><p·class="caption"·id="change-2.0.0b4-6"><span·class="target"·id="change-e02cade6952e8afe79edf480a3932a25"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-e02cade6952e8afe79edf480a3932a25">¶</a></span><p>Fixed·bug·in·<a·class="reference·internal"·href="../orm/dataclasses.html#orm-declarative-native-dataclasses"><span·class="std·std-ref">Declarative·Dataclass·Mapping</span></a>·feature·where·using
7156 plain·dataclass·fields·with·the·<code·class="docutils·literal·notranslate"><span·class="pre">__allow_unmapped__</span></code>·directive·in·a7156 plain·dataclass·fields·with·the·<code·class="docutils·literal·notranslate"><span·class="pre">__allow_unmapped__</span></code>·directive·in·a
7157 mapping·would·not·create·a·dataclass·with·the·correct·class-level·state·for7157 mapping·would·not·create·a·dataclass·with·the·correct·class-level·state·for
7158 those·fields,·copying·the·raw·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·to·the·class·inappropriately7158 those·fields,·copying·the·raw·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·to·the·class·inappropriately
7159 after·dataclasses·itself·had·replaced·the·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·with·the7159 after·dataclasses·itself·had·replaced·the·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·with·the
7160 class-level·default·value.</p>7160 class-level·default·value.</p>
7161 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8880">#8880</a></p>7161 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8880">#8880</a></p>
Offset 9002, 29 lines modifiedOffset 9002, 15 lines modified
9002 that·may·refer·to·additional·tables·within·the·WHERE·criteria·of·the9002 that·may·refer·to·additional·tables·within·the·WHERE·criteria·of·the
9003 statement·without·the·need·to·use·subqueries.·This·syntax·is·invoked9003 statement·without·the·need·to·use·subqueries.·This·syntax·is·invoked
9004 automatically·when·using·the·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Update"·title="sqlalchemy.sql.expression.Update"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Update</span></code></a>·construct·when·more·than9004 automatically·when·using·the·<a·class="reference·internal"·href="../core/dml.html#sqlalchemy.sql.expression.Update"·title="sqlalchemy.sql.expression.Update"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Update</span></code></a>·construct·when·more·than
9005 one·table·or·other·entity·or·selectable·is·used.</p>9005 one·table·or·other·entity·or·selectable·is·used.</p>
9006 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7185">#7185</a></p>9006 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7185">#7185</a></p>
9007 </p>9007 </p>
9008 </li>9008 </li>
9009 <li><p·class="caption"·id="change-2.0.0b1-88"><span·class="target"·id="change-aba109875059299e0eb82359b5825416"><strong>[sqlite]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-aba109875059299e0eb82359b5825416">¶</a></span><p>The·SQLite·dialect·now·defaults·to·<a·class="reference·internal"·href="../core/pooling.html#sqlalchemy.pool.QueuePool"·title="sqlalchemy.pool.QueuePool"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">QueuePool</span></code></a>·when·a·file 
9010 based·database·is·used.·This·is·set·along·with·setting·the 
9011 <code·class="docutils·literal·notranslate"><span·class="pre">check_same_thread</span></code>·parameter·to·<code·class="docutils·literal·notranslate"><span·class="pre">False</span></code>.·It·has·been·observed·that·the 
9012 previous·approach·of·defaulting·to·<a·class="reference·internal"·href="../core/pooling.html#sqlalchemy.pool.NullPool"·title="sqlalchemy.pool.NullPool"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">NullPool</span></code></a>,·which·does·not 
9013 hold·onto·database·connections·after·they·are·released,·did·in·fact·have·a 
9014 measurable·negative·performance·impact.·As·always,·the·pool·class·is 
9015 customizable·via·the·<a·class="reference·internal"·href="../core/engines.html#sqlalchemy.create_engine.params.poolclass"·title="sqlalchemy.create_engine"><code·class="xref·py·py-paramref·docutils·literal·notranslate"><span·class="pre">create_engine.poolclass</span></code></a>·parameter.</p> 
9016 <div·class="admonition·seealso"> 
9017 <p·class="admonition-title">See·also</p> 
9018 <p><a·class="reference·internal"·href="whatsnew_20.html#change-7490"><span·class="std·std-ref">The·SQLite·dialect·uses·QueuePool·for·file-based·databases</span></a></p> 
9019 </div> 
9020 <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7490">#7490</a></p> 
9021 </p> 
9022 </li> 
Max diff block lines reached; 3829/21942 bytes (17.45%) of diff not shown.
10.5 KB
html2text {}
    
Offset 1728, 30 lines modifiedOffset 1728, 29 lines modified
1728 ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded1728 ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded
1729 ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to1729 ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to
1730 ······cascading·failures.1730 ······cascading·failures.
1731 ······References:·_\x8#_\x81_\x81_\x81_\x88_\x871731 ······References:·_\x8#_\x81_\x81_\x81_\x88_\x87
1732 *\x8**\x8**\x8**\x8**\x8*·2\x82.\x8.0\x80.\x8.2\x828\x88_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*1732 *\x8**\x8**\x8**\x8**\x8*·2\x82.\x8.0\x80.\x8.2\x828\x88_\x8?\x8·*\x8**\x8**\x8**\x8**\x8*
1733 Released:·March·4,·20241733 Released:·March·4,·2024
1734 *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8·*\x8**\x8**\x8**\x8*1734 *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8·*\x8**\x8**\x8**\x8*
1735 ····*·[\x8[o\x8or\x8rm\x8m]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8 
1736 ······Adjusted·the·fix·made·in·_\x8#_\x81_\x80_\x85_\x87_\x80,·released·in·2.0.23,·where·new·logic·was 
1737 ······added·to·reconcile·possibly·changing·bound·parameter·values·across·cache 
1738 ······key·generations·used·within·the·_\x8w_\x8i_\x8t_\x8h_\x8__\x8e_\x8x_\x8p_\x8r_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n_\x8(_\x8)·construct.·The·new 
1739 ······logic·changes·the·approach·by·which·the·new·bound·parameter·values·are 
1740 ······associated·with·the·statement,·avoiding·the·need·to·deep-copy·the 
1741 ······statement·which·can·result·in·a·significant·performance·penalty·for·very 
1742 ······deep·/·complex·SQL·constructs.·The·new·approach·no·longer·requires·this 
1743 ······deep-copy·step. 
1744 ······References:·_\x8#_\x81_\x81_\x80_\x88_\x85 
1745 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x81735 ····*·[\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
1746 Fixed·regression·caused·by·_\x8#_\x89_\x87_\x87_\x89·where·using·the·“secondary”·table·in·a1736 ······Fixed·regression·caused·by·_\x8#_\x89_\x87_\x87_\x89·where·using·the·“secondary”·table·in·a
1747 relationship·and_()·expression·would·fail·to·be·aliased·to·match·how·the1737 ······relationship·and_()·expression·would·fail·to·be·aliased·to·match·how·the
1748 “secondary”·table·normally·renders·within·a·_.S_.e_.l_.e_.c_.t_.._.j_.o_.i_.n_.(_.)·expression,·leading1738 ······“secondary”·table·normally·renders·within·a·_.S_.e_.l_.e_.c_.t_.._.j_.o_.i_.n_.(_.)·expression,
1749 to·an·invalid·query.1739 ······leading·to·an·invalid·query.
 1740 ······References:·_\x8#_\x81_\x81_\x80_\x81_\x80
 1741 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[r\x8re\x8eg\x8gr\x8re\x8es\x8ss\x8si\x8io\x8on\x8n]\x8]·_\x8
 1742 Adjusted·the·fix·made·in·_\x8#_\x81_\x80_\x85_\x87_\x80,·released·in·2.0.23,·where·new·logic·was·added
 1743 to·reconcile·possibly·changing·bound·parameter·values·across·cache·key
 1744 generations·used·within·the·_\x8w_\x8i_\x8t_\x8h_\x8__\x8e_\x8x_\x8p_\x8r_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n_\x8(_\x8)·construct.·The·new·logic·changes
 1745 the·approach·by·which·the·new·bound·parameter·values·are·associated·with·the
 1746 statement,·avoiding·the·need·to·deep-copy·the·statement·which·can·result·in·a
 1747 significant·performance·penalty·for·very·deep·/·complex·SQL·constructs.·The·new
 1748 approach·no·longer·requires·this·deep-copy·step.
1750 References:·_\x8#_\x81_\x81_\x80_\x81_.01749 References:·_\x8#_\x81_\x81_\x80_\x88_.5
1751 *\x8**\x8**\x8**\x8*·e\x8en\x8ng\x8gi\x8in\x8ne\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*1750 *\x8**\x8**\x8**\x8*·e\x8en\x8ng\x8gi\x8in\x8ne\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
1752 ····*·[\x8[e\x8en\x8ng\x8gi\x8in\x8ne\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x81751 ····*·[\x8[e\x8en\x8ng\x8gi\x8in\x8ne\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8
1753 ······Added·new·core·execution·option1752 ······Added·new·core·execution·option
1754 ······_\x8C_\x8o_\x8n_\x8n_\x8e_\x8c_\x8t_\x8i_\x8o_\x8n_\x8._\x8e_\x8x_\x8e_\x8c_\x8u_\x8t_\x8i_\x8o_\x8n_\x8__\x8o_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s_\x8._\x8p_\x8r_\x8e_\x8s_\x8e_\x8r_\x8v_\x8e_\x8__\x8r_\x8o_\x8w_\x8c_\x8o_\x8u_\x8n_\x8t.·When·set,·the1753 ······_\x8C_\x8o_\x8n_\x8n_\x8e_\x8c_\x8t_\x8i_\x8o_\x8n_\x8._\x8e_\x8x_\x8e_\x8c_\x8u_\x8t_\x8i_\x8o_\x8n_\x8__\x8o_\x8p_\x8t_\x8i_\x8o_\x8n_\x8s_\x8._\x8p_\x8r_\x8e_\x8s_\x8e_\x8r_\x8v_\x8e_\x8__\x8r_\x8o_\x8w_\x8c_\x8o_\x8u_\x8n_\x8t.·When·set,·the
1755 ······cursor.rowcount·attribute·from·the·DBAPI·cursor·will·be·unconditionally1754 ······cursor.rowcount·attribute·from·the·DBAPI·cursor·will·be·unconditionally
1756 ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI1755 ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI
1757 ······offers·for·any·kind·of·statement·will·be·available·using·the1756 ······offers·for·any·kind·of·statement·will·be·available·using·the
Offset 1898, 15 lines modifiedOffset 1897, 15 lines modified
1898 ······Fixed·an·issue·regarding·the·use·of·the·_\x8U_\x8u_\x8i_\x8d·datatype·with·the1897 ······Fixed·an·issue·regarding·the·use·of·the·_\x8U_\x8u_\x8i_\x8d·datatype·with·the
1899 ······_\x8U_\x8u_\x8i_\x8d_\x8._\x8a_\x8s_\x8__\x8u_\x8u_\x8i_\x8d·parameter·set·to·False,·when·using·the·pymssql·dialect.·ORM-1898 ······_\x8U_\x8u_\x8i_\x8d_\x8._\x8a_\x8s_\x8__\x8u_\x8u_\x8i_\x8d·parameter·set·to·False,·when·using·the·pymssql·dialect.·ORM-
1900 ······optimized·INSERT·statements·(e.g.·the·“insertmanyvalues”·feature)·would1899 ······optimized·INSERT·statements·(e.g.·the·“insertmanyvalues”·feature)·would
1901 ······not·correctly·align·primary·key·UUID·values·for·bulk·INSERT·statements,1900 ······not·correctly·align·primary·key·UUID·values·for·bulk·INSERT·statements,
1902 ······resulting·in·errors.·Similar·issues·were·fixed·for·the·PostgreSQL·drivers1901 ······resulting·in·errors.·Similar·issues·were·fixed·for·the·PostgreSQL·drivers
1903 ······as·well.1902 ······as·well.
1904 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*1903 *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8·*\x8**\x8**\x8**\x8*
1905 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·_\x81904 ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b.bu.ug.g].]·[.[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e]\x8]·_\x8
1906 ······Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value1905 ······Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value
1907 ······set·by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both1906 ······set·by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both
1908 ······cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.1907 ······cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.
1909 ······The·setting·of·50·could·cause·significant·performance·regressions1908 ······The·setting·of·50·could·cause·significant·performance·regressions
1910 ······compared·to·when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of1909 ······compared·to·when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of
1911 ······rows·over·slower·networks.1910 ······rows·over·slower·networks.
1912 ······References:·_\x8#_\x81_\x80_\x88_\x87_\x871911 ······References:·_\x8#_\x81_\x80_\x88_\x87_\x87
Offset 4793, 33 lines modifiedOffset 4792, 33 lines modified
4793 References:·_\x8#_\x88_\x88_\x85_\x894792 References:·_\x8#_\x88_\x88_\x85_\x89
4794 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x84793 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8
4795 Added·_\x8m_\x8a_\x8p_\x8p_\x8e_\x8d_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8._\x8c_\x8o_\x8m_\x8p_\x8a_\x8r_\x8e·parameter·to·relevant·ORM·attribute·constructs4794 Added·_\x8m_\x8a_\x8p_\x8p_\x8e_\x8d_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8._\x8c_\x8o_\x8m_\x8p_\x8a_\x8r_\x8e·parameter·to·relevant·ORM·attribute·constructs
4796 including·_\x8m_\x8a_\x8p_\x8p_\x8e_\x8d_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8(_\x8),·_\x8r_\x8e_\x8l_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s_\x8h_\x8i_\x8p_\x8(_\x8)·etc.·to·provide·for·the·Python4795 including·_\x8m_\x8a_\x8p_\x8p_\x8e_\x8d_\x8__\x8c_\x8o_\x8l_\x8u_\x8m_\x8n_\x8(_\x8),·_\x8r_\x8e_\x8l_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s_\x8h_\x8i_\x8p_\x8(_\x8)·etc.·to·provide·for·the·Python
4797 dataclasses·compare·parameter·on·field(),·when·using·the·_\x8D_\x8e_\x8c_\x8l_\x8a_\x8r_\x8a_\x8t_\x8i_\x8v_\x8e_\x8·_\x8D_\x8a_\x8t_\x8a_\x8c_\x8l_\x8a_\x8s_\x8s4796 dataclasses·compare·parameter·on·field(),·when·using·the·_\x8D_\x8e_\x8c_\x8l_\x8a_\x8r_\x8a_\x8t_\x8i_\x8v_\x8e_\x8·_\x8D_\x8a_\x8t_\x8a_\x8c_\x8l_\x8a_\x8s_\x8s
4798 _\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature.·Pull·request·courtesy·Simon·Schiele.4797 _\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature.·Pull·request·courtesy·Simon·Schiele.
4799 References:·_\x8#_\x88_\x89_\x80_\x854798 References:·_\x8#_\x88_\x89_\x80_\x85
4800 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8 
4801 Additional·performance·enhancements·within·ORM-enabled·SQL·statements, 
4802 specifically·targeting·callcounts·within·the·construction·of·ORM·statements, 
4803 using·combinations·of·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8)·with·_\x8u_\x8n_\x8i_\x8o_\x8n_\x8(_\x8)·and·similar·“compound”·constructs, 
4804 in·addition·to·direct·performance·improvements·to·the·corresponding_column() 
4805 internal·method·that·is·used·heavily·by·the·ORM·by·constructs·like·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8) 
4806 and·similar. 
4807 References:·_\x8#_\x88_\x87_\x89_\x86 
4808 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x84799 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
4809 Fixed·issue·where·use·of·an·unknown·datatype·within·a·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·annotation·for·a4800 Fixed·issue·where·use·of·an·unknown·datatype·within·a·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·annotation·for·a
4810 column-based·attribute·would·silently·fail·to·map·the·attribute,·rather·than4801 column-based·attribute·would·silently·fail·to·map·the·attribute,·rather·than
4811 reporting·an·exception;·an·informative·exception·message·is·now·raised.4802 reporting·an·exception;·an·informative·exception·message·is·now·raised.
4812 References:·_\x8#_\x88_\x88_\x88_\x884803 References:·_\x8#_\x88_\x88_\x88_\x88
4813 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x84804 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
4814 Fixed·a·suite·of·issues·involving·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·use·with·dictionary·types,·such·as4805 Fixed·a·suite·of·issues·involving·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·use·with·dictionary·types,·such·as
4815 Mapped[Dict[str,·str]·|·None],·would·not·be·correctly·interpreted·in4806 Mapped[Dict[str,·str]·|·None],·would·not·be·correctly·interpreted·in
4816 Declarative·ORM·mappings.·Support·to·correctly·“de-optionalize”·this·type4807 Declarative·ORM·mappings.·Support·to·correctly·“de-optionalize”·this·type
4817 including·for·lookup·in·type_annotation_map·has·been·fixed.4808 including·for·lookup·in·type_annotation_map·has·been·fixed.
4818 References:·_\x8#_\x88_\x87_\x87_\x874809 References:·_\x8#_\x88_\x87_\x87_\x87
 4810 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·_\x8
 4811 Additional·performance·enhancements·within·ORM-enabled·SQL·statements,
 4812 specifically·targeting·callcounts·within·the·construction·of·ORM·statements,
 4813 using·combinations·of·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8)·with·_\x8u_\x8n_\x8i_\x8o_\x8n_\x8(_\x8)·and·similar·“compound”·constructs,
 4814 in·addition·to·direct·performance·improvements·to·the·corresponding_column()
 4815 internal·method·that·is·used·heavily·by·the·ORM·by·constructs·like·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8)
 4816 and·similar.
 4817 References:·_\x8#_\x88_\x87_\x89_\x86
4819 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x84818 [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
4820 Fixed·bug·in·_\x8D_\x8e_\x8c_\x8l_\x8a_\x8r_\x8a_\x8t_\x8i_\x8v_\x8e_\x8·_\x8D_\x8a_\x8t_\x8a_\x8c_\x8l_\x8a_\x8s_\x8s_\x8·_\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature·where·using·plain·dataclass4819 Fixed·bug·in·_\x8D_\x8e_\x8c_\x8l_\x8a_\x8r_\x8a_\x8t_\x8i_\x8v_\x8e_\x8·_\x8D_\x8a_\x8t_\x8a_\x8c_\x8l_\x8a_\x8s_\x8s_\x8·_\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature·where·using·plain·dataclass
4821 fields·with·the·__allow_unmapped__·directive·in·a·mapping·would·not·create·a4820 fields·with·the·__allow_unmapped__·directive·in·a·mapping·would·not·create·a
4822 dataclass·with·the·correct·class-level·state·for·those·fields,·copying·the·raw4821 dataclass·with·the·correct·class-level·state·for·those·fields,·copying·the·raw
4823 Field·object·to·the·class·inappropriately·after·dataclasses·itself·had·replaced4822 Field·object·to·the·class·inappropriately·after·dataclasses·itself·had·replaced
4824 the·Field·object·with·the·class-level·default·value.4823 the·Field·object·with·the·class-level·default·value.
4825 References:·_\x8#_\x88_\x88_\x88_\x804824 References:·_\x8#_\x88_\x88_\x88_\x80
Offset 6194, 38 lines modifiedOffset 6193, 38 lines modified
6194 [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x86193 [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8
6195 The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements·that6194 The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements·that
6196 may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement6195 may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement
6197 without·the·need·to·use·subqueries.·This·syntax·is·invoked·automatically·when6196 without·the·need·to·use·subqueries.·This·syntax·is·invoked·automatically·when
6198 using·the·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e·construct·when·more·than·one·table·or·other·entity·or6197 using·the·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e·construct·when·more·than·one·table·or·other·entity·or
6199 selectable·is·used.6198 selectable·is·used.
6200 References:·_\x8#_\x87_\x81_\x88_\x856199 References:·_\x8#_\x87_\x81_\x88_\x85
6201 [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8 
6202 The·SQLite·dialect·now·defaults·to·_\x8Q_\x8u_\x8e_\x8u_\x8e_\x8P_\x8o_\x8o_\x8l·when·a·file·based·database·is 
6203 used.·This·is·set·along·with·setting·the·check_same_thread·parameter·to·False. 
6204 It·has·been·observed·that·the·previous·approach·of·defaulting·to·_\x8N_\x8u_\x8l_\x8l_\x8P_\x8o_\x8o_\x8l, 
6205 which·does·not·hold·onto·database·connections·after·they·are·released,·did·in 
6206 fact·have·a·measurable·negative·performance·impact.·As·always,·the·pool·class 
6207 is·customizable·via·the·_\x8c_\x8r_\x8e_\x8a_\x8t_\x8e_\x8__\x8e_\x8n_\x8g_\x8i_\x8n_\x8e_\x8._\x8p_\x8o_\x8o_\x8l_\x8c_\x8l_\x8a_\x8s_\x8s·parameter. 
6208 See·also 
6209 _\x8T_\x8h_\x8e_\x8·_\x8S_\x8Q_\x8L_\x8i_\x8t_\x8e_\x8·_\x8d_\x8i_\x8a_\x8l_\x8e_\x8c_\x8t_\x8·_\x8u_\x8s_\x8e_\x8s_\x8·_\x8Q_\x8u_\x8e_\x8u_\x8e_\x8P_\x8o_\x8o_\x8l_\x8·_\x8f_\x8o_\x8r_\x8·_\x8f_\x8i_\x8l_\x8e_\x8-_\x8b_\x8a_\x8s_\x8e_\x8d_\x8·_\x8d_\x8a_\x8t_\x8a_\x8b_\x8a_\x8s_\x8e_\x8s 
6210 References:·_\x8#_\x87_\x84_\x89_\x80 
6211 [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x86200 [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8
6212 Removed·the·warning·that·emits·from·the·_\x8N_\x8u_\x8m_\x8e_\x8r_\x8i_\x8c·type·about·DBAPIs·not6201 Removed·the·warning·that·emits·from·the·_\x8N_\x8u_\x8m_\x8e_\x8r_\x8i_\x8c·type·about·DBAPIs·not
6213 supporting·Decimal·values·natively.·This·warning·was·oriented·towards·SQLite,6202 supporting·Decimal·values·natively.·This·warning·was·oriented·towards·SQLite,
6214 which·does·not·have·any·real·way·without·additional·extensions·or·workarounds6203 which·does·not·have·any·real·way·without·additional·extensions·or·workarounds
6215 of·handling·precision·numeric·values·more·than·15·significant·digits·as·it·only6204 of·handling·precision·numeric·values·more·than·15·significant·digits·as·it·only
6216 uses·floating·point·math·to·represent·numbers.·As·this·is·a·known·and6205 uses·floating·point·math·to·represent·numbers.·As·this·is·a·known·and
6217 documented·limitation·in·SQLite·itself,·and·not·a·quirk·of·the·pysqlite·driver,6206 documented·limitation·in·SQLite·itself,·and·not·a·quirk·of·the·pysqlite·driver,
6218 there’s·no·need·for·SQLAlchemy·to·warn·for·this.·The·change·does·not·otherwise6207 there’s·no·need·for·SQLAlchemy·to·warn·for·this.·The·change·does·not·otherwise
6219 modify·how·precision·numerics·are·handled.·Values·can·continue·to·be·handled·as6208 modify·how·precision·numerics·are·handled.·Values·can·continue·to·be·handled·as
6220 Decimal()·or·float()·as·configured·with·the·_\x8N_\x8u_\x8m_\x8e_\x8r_\x8i_\x8c,·_\x8F_\x8l_\x8o_\x8a_\x8t·,·and·related6209 Decimal()·or·float()·as·configured·with·the·_\x8N_\x8u_\x8m_\x8e_\x8r_\x8i_\x8c,·_\x8F_\x8l_\x8o_\x8a_\x8t·,·and·related
6221 datatypes,·just·without·the·ability·to·maintain·precision·beyond·15·significant6210 datatypes,·just·without·the·ability·to·maintain·precision·beyond·15·significant
6222 digits·when·using·SQLite,·unless·alternate·representations·such·as·strings·are6211 digits·when·using·SQLite,·unless·alternate·representations·such·as·strings·are
Max diff block lines reached; 1284/10728 bytes (11.97%) of diff not shown.
39.9 KB
./usr/share/doc/python-sqlalchemy-doc/html/orm/examples.html
Ordering differences only
    
Offset 299, 46 lines modifiedOffset 299, 46 lines modified
299 </section>299 </section>
300 <section·id="module-examples.association">300 <section·id="module-examples.association">
301 <span·id="associations"></span><span·id="examples-associations"></span><h3>Associations<a·class="headerlink"·href="#module-examples.association"·title="Link·to·this·heading">¶</a></h3>301 <span·id="associations"></span><span·id="examples-associations"></span><h3>Associations<a·class="headerlink"·href="#module-examples.association"·title="Link·to·this·heading">¶</a></h3>
302 <p>Examples·illustrating·the·usage·of·the·“association·object”·pattern,302 <p>Examples·illustrating·the·usage·of·the·“association·object”·pattern,
303 where·an·intermediary·class·mediates·the·relationship·between·two303 where·an·intermediary·class·mediates·the·relationship·between·two
304 classes·that·are·associated·in·a·many-to-many·pattern.</p>304 classes·that·are·associated·in·a·many-to-many·pattern.</p>
305 <p>Listing·of·files:<ul·class="simple">305 <p>Listing·of·files:<ul·class="simple">
306 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/basic_association.html">basic_association.py</a>·-·Illustrate·a·many-to-many·relationship·between·an 
307 “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price 
308 with·each·via·an·association·object·called·“OrderItem”</p> 
309 </p></li> 
310 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/dict_of_sets_with_default.html">dict_of_sets_with_default.py</a>·-·An·advanced·association·proxy·example·which306 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/dict_of_sets_with_default.html">dict_of_sets_with_default.py</a>·-·An·advanced·association·proxy·example·which
311 illustrates·nesting·of·association·proxies·to·produce·multi-level·Python307 illustrates·nesting·of·association·proxies·to·produce·multi-level·Python
312 collections,·in·this·case·a·dictionary·with·string·keys·and·sets·of·integers308 collections,·in·this·case·a·dictionary·with·string·keys·and·sets·of·integers
313 as·values,·which·conceal·the·underlying·mapped·classes.</p>309 as·values,·which·conceal·the·underlying·mapped·classes.</p>
314 </p></li>310 </p></li>
 311 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/basic_association.html">basic_association.py</a>·-·Illustrate·a·many-to-many·relationship·between·an
 312 “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price
 313 with·each·via·an·association·object·called·“OrderItem”</p>
 314 </p></li>
315 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/proxied_association.html">proxied_association.py</a>·-·Same·example·as·basic_association,·adding·in315 <li><p><p><a·class="reference·external"·href="../_modules/examples/association/proxied_association.html">proxied_association.py</a>·-·Same·example·as·basic_association,·adding·in
316 usage·of·<a·class="reference·internal"·href="extensions/associationproxy.html#module-sqlalchemy.ext.associationproxy"·title="sqlalchemy.ext.associationproxy"><code·class="xref·py·py-mod·docutils·literal·notranslate"><span·class="pre">sqlalchemy.ext.associationproxy</span></code></a>·to·make·explicit·references316 usage·of·<a·class="reference·internal"·href="extensions/associationproxy.html#module-sqlalchemy.ext.associationproxy"·title="sqlalchemy.ext.associationproxy"><code·class="xref·py·py-mod·docutils·literal·notranslate"><span·class="pre">sqlalchemy.ext.associationproxy</span></code></a>·to·make·explicit·references
317 to·<code·class="docutils·literal·notranslate"><span·class="pre">OrderItem</span></code>·optional.</p>317 to·<code·class="docutils·literal·notranslate"><span·class="pre">OrderItem</span></code>·optional.</p>
318 </p></li>318 </p></li>
319 </ul>319 </ul>
320 </p>320 </p>
321 </section>321 </section>
322 <section·id="module-examples.asyncio">322 <section·id="module-examples.asyncio">
323 <span·id="asyncio-integration"></span><span·id="examples-asyncio"></span><h3>Asyncio·Integration<a·class="headerlink"·href="#module-examples.asyncio"·title="Link·to·this·heading">¶</a></h3>323 <span·id="asyncio-integration"></span><span·id="examples-asyncio"></span><h3>Asyncio·Integration<a·class="headerlink"·href="#module-examples.asyncio"·title="Link·to·this·heading">¶</a></h3>
324 <p>Examples·illustrating·the·asyncio·engine·feature·of·SQLAlchemy.</p>324 <p>Examples·illustrating·the·asyncio·engine·feature·of·SQLAlchemy.</p>
325 <p>Listing·of·files:<ul·class="simple">325 <p>Listing·of·files:<ul·class="simple">
 326 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/greenlet_orm.html">greenlet_orm.py</a>·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession·object
 327 for·asynchronous·ORM·use,·including·the·optional·run_sync()·method.</p>
 328 </p></li>
326 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/async_orm.html">async_orm.py</a>·-·Illustrates·use·of·the·<code·class="docutils·literal·notranslate"><span·class="pre">sqlalchemy.ext.asyncio.AsyncSession</span></code>·object329 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/async_orm.html">async_orm.py</a>·-·Illustrates·use·of·the·<code·class="docutils·literal·notranslate"><span·class="pre">sqlalchemy.ext.asyncio.AsyncSession</span></code>·object
327 for·asynchronous·ORM·use.</p>330 for·asynchronous·ORM·use.</p>
328 </p></li>331 </p></li>
 332 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/basic.html">basic.py</a>·-·Illustrates·the·asyncio·engine·/·connection·interface.</p>
 333 </p></li>
329 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/gather_orm_statements.html">gather_orm_statements.py</a>·-·Illustrates·how·to·run·many·statements·concurrently·using·<code·class="docutils·literal·notranslate"><span·class="pre">asyncio.gather()</span></code>334 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/gather_orm_statements.html">gather_orm_statements.py</a>·-·Illustrates·how·to·run·many·statements·concurrently·using·<code·class="docutils·literal·notranslate"><span·class="pre">asyncio.gather()</span></code>
330 along·many·asyncio·database·connections,·merging·ORM·results·into·a·single335 along·many·asyncio·database·connections,·merging·ORM·results·into·a·single
331 <code·class="docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code>.</p>336 <code·class="docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code>.</p>
332 </p></li>337 </p></li>
333 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/greenlet_orm.html">greenlet_orm.py</a>·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession·object 
334 for·asynchronous·ORM·use,·including·the·optional·run_sync()·method.</p> 
335 </p></li> 
336 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/basic.html">basic.py</a>·-·Illustrates·the·asyncio·engine·/·connection·interface.</p> 
337 </p></li> 
338 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/async_orm_writeonly.html">async_orm_writeonly.py</a>·-·Illustrates·using·<strong>write·only·relationships</strong>·for·simpler·handling338 <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/async_orm_writeonly.html">async_orm_writeonly.py</a>·-·Illustrates·using·<strong>write·only·relationships</strong>·for·simpler·handling
339 of·ORM·collections·under·asyncio.</p>339 of·ORM·collections·under·asyncio.</p>
340 </p></li>340 </p></li>
341 </ul>341 </ul>
342 </p>342 </p>
343 </section>343 </section>
344 <section·id="module-examples.graphs">344 <section·id="module-examples.graphs">
Offset 382, 26 lines modifiedOffset 382, 26 lines modified
382 are·modernized·versions·of·recipes·presented·in·the·2007·blog·post382 are·modernized·versions·of·recipes·presented·in·the·2007·blog·post
383 <a·class="reference·external"·href="https://techspot.zzzeek.org/2007/05/29/polymorphic-associations-with-sqlalchemy/">Polymorphic·Associations·with·SQLAlchemy</a>.</p>383 <a·class="reference·external"·href="https://techspot.zzzeek.org/2007/05/29/polymorphic-associations-with-sqlalchemy/">Polymorphic·Associations·with·SQLAlchemy</a>.</p>
384 <p>Listing·of·files:<ul·class="simple">384 <p>Listing·of·files:<ul·class="simple">
385 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/table_per_related.html">table_per_related.py</a>·-·Illustrates·a·generic·association·which·persists·association385 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/table_per_related.html">table_per_related.py</a>·-·Illustrates·a·generic·association·which·persists·association
386 objects·within·individual·tables,·each·one·generated·to·persist386 objects·within·individual·tables,·each·one·generated·to·persist
387 those·objects·on·behalf·of·a·particular·parent·class.</p>387 those·objects·on·behalf·of·a·particular·parent·class.</p>
388 </p></li>388 </p></li>
389 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/table_per_association.html">table_per_association.py</a>·-·Illustrates·a·mixin·which·provides·a·generic·association 
390 via·a·individually·generated·association·tables·for·each·parent·class. 
391 The·associated·objects·themselves·are·persisted·in·a·single·table 
392 shared·among·all·parents.</p> 
393 </p></li> 
394 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/discriminator_on_association.html">discriminator_on_association.py</a>·-·Illustrates·a·mixin·which·provides·a·generic·association389 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/discriminator_on_association.html">discriminator_on_association.py</a>·-·Illustrates·a·mixin·which·provides·a·generic·association
395 using·a·single·target·table·and·a·single·association·table,390 using·a·single·target·table·and·a·single·association·table,
396 referred·to·by·all·parent·tables.··The·association·table391 referred·to·by·all·parent·tables.··The·association·table
397 contains·a·“discriminator”·column·which·determines·what·type·of392 contains·a·“discriminator”·column·which·determines·what·type·of
398 parent·object·associates·to·each·particular·row·in·the·association393 parent·object·associates·to·each·particular·row·in·the·association
399 table.</p>394 table.</p>
400 </p></li>395 </p></li>
 396 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/table_per_association.html">table_per_association.py</a>·-·Illustrates·a·mixin·which·provides·a·generic·association
 397 via·a·individually·generated·association·tables·for·each·parent·class.
 398 The·associated·objects·themselves·are·persisted·in·a·single·table
 399 shared·among·all·parents.</p>
 400 </p></li>
401 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/generic_fk.html">generic_fk.py</a>·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a·similar·fashion401 <li><p><p><a·class="reference·external"·href="../_modules/examples/generic_associations/generic_fk.html">generic_fk.py</a>·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a·similar·fashion
402 to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This402 to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This
403 approach·bypasses·standard·referential·integrity403 approach·bypasses·standard·referential·integrity
404 practices,·in·that·the·“foreign·key”·column·is·not·actually404 practices,·in·that·the·“foreign·key”·column·is·not·actually
405 constrained·to·refer·to·any·particular·table;·instead,405 constrained·to·refer·to·any·particular·table;·instead,
406 in-application·logic·is·used·to·determine·which·table·is·referenced.</p>406 in-application·logic·is·used·to·determine·which·table·is·referenced.</p>
407 </p></li>407 </p></li>
Offset 477, 33 lines modifiedOffset 477, 33 lines modified
477 <div·class="admonition·seealso">477 <div·class="admonition·seealso">
478 <p·class="admonition-title">See·also</p>478 <p·class="admonition-title">See·also</p>
479 <p><a·class="reference·internal"·href="../faq/performance.html#faq-how-to-profile"><span·class="std·std-ref">How·can·I·profile·a·SQLAlchemy·powered·application?</span></a></p>479 <p><a·class="reference·internal"·href="../faq/performance.html#faq-how-to-profile"><span·class="std·std-ref">How·can·I·profile·a·SQLAlchemy·powered·application?</span></a></p>
480 </div>480 </div>
481 <section·id="file-listing">481 <section·id="file-listing">
482 <h4>File·Listing<a·class="headerlink"·href="#file-listing"·title="Link·to·this·heading">¶</a></h4>482 <h4>File·Listing<a·class="headerlink"·href="#file-listing"·title="Link·to·this·heading">¶</a></h4>
483 <p>Listing·of·files:<ul·class="simple">483 <p>Listing·of·files:<ul·class="simple">
 484 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/__main__.html">__main__.py</a>·-·Allows·the·examples/performance·package·to·be·run·as·a·script.</p>
484 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/bulk_updates.html">bulk_updates.py</a>·-·This·series·of·tests·will·illustrate·different·ways·to·UPDATE·a·large·number 
485 of·rows·in·bulk·(under·construction!·there’s·just·one·test·at·the·moment)</p> 
486 </p></li>485 </p></li>
487 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/large_resultsets.html">large_resultsets.py</a>·-·In·this·series·of·tests,·we·are·looking·at·time·to·load·a·large·number486 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/large_resultsets.html">large_resultsets.py</a>·-·In·this·series·of·tests,·we·are·looking·at·time·to·load·a·large·number
488 of·very·small·and·simple·rows.</p>487 of·very·small·and·simple·rows.</p>
489 </p></li>488 </p></li>
490 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/single_inserts.html">single_inserts.py</a>·-·In·this·series·of·tests,·we’re·looking·at·a·method·that·inserts·a·row489 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/single_inserts.html">single_inserts.py</a>·-·In·this·series·of·tests,·we’re·looking·at·a·method·that·inserts·a·row
491 within·a·distinct·transaction,·and·afterwards·returns·to·essentially·a490 within·a·distinct·transaction,·and·afterwards·returns·to·essentially·a
492 “closed”·state.···This·would·be·analogous·to·an·API·call·that·starts·up491 “closed”·state.···This·would·be·analogous·to·an·API·call·that·starts·up
493 a·database·connection,·inserts·the·row,·commits·and·closes.</p>492 a·database·connection,·inserts·the·row,·commits·and·closes.</p>
494 </p></li>493 </p></li>
495 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/__main__.html">__main__.py</a>·-·Allows·the·examples/performance·package·to·be·run·as·a·script.</p> 
496 </p></li> 
497 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/short_selects.html">short_selects.py</a>·-·This·series·of·tests·illustrates·different·ways·to·SELECT·a·single494 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/short_selects.html">short_selects.py</a>·-·This·series·of·tests·illustrates·different·ways·to·SELECT·a·single
498 record·by·primary·key</p>495 record·by·primary·key</p>
499 </p></li>496 </p></li>
500 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/bulk_inserts.html">bulk_inserts.py</a>·-·This·series·of·tests·illustrates·different·ways·to·INSERT·a·large·number497 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/bulk_inserts.html">bulk_inserts.py</a>·-·This·series·of·tests·illustrates·different·ways·to·INSERT·a·large·number
501 of·rows·in·bulk.</p>498 of·rows·in·bulk.</p>
502 </p></li>499 </p></li>
 500 <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/bulk_updates.html">bulk_updates.py</a>·-·This·series·of·tests·will·illustrate·different·ways·to·UPDATE·a·large·number
 501 of·rows·in·bulk·(under·construction!·there’s·just·one·test·at·the·moment)</p>
 502 </p></li>
503 </ul>503 </ul>
504 </p>504 </p>
505 </section>505 </section>
506 <section·id="running-all-tests-with-time">506 <section·id="running-all-tests-with-time">
507 <h4>Running·all·tests·with·time<a·class="headerlink"·href="#running-all-tests-with-time"·title="Link·to·this·heading">¶</a></h4>507 <h4>Running·all·tests·with·time<a·class="headerlink"·href="#running-all-tests-with-time"·title="Link·to·this·heading">¶</a></h4>
508 <p>This·is·the·default·form·of·run:</p>508 <p>This·is·the·default·form·of·run:</p>
509 <div·class="highlight-default·notranslate"><div·class="highlight"><pre><span></span><span·class="err">$</span>·<span·class="n">python</span>·<span·class="o">-</span><span·class="n">m</span>·<span·class="n">examples</span><span·class="o">.</span><span·class="n">performance</span>·<span·class="n">single_inserts</span>509 <div·class="highlight-default·notranslate"><div·class="highlight"><pre><span></span><span·class="err">$</span>·<span·class="n">python</span>·<span·class="o">-</span><span·class="n">m</span>·<span·class="n">examples</span><span·class="o">.</span><span·class="n">performance</span>·<span·class="n">single_inserts</span>
Offset 756, 31 lines modifiedOffset 756, 31 lines modified
756 <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes756 <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes
Max diff block lines reached; 12718/22893 bytes (55.55%) of diff not shown.
17.4 KB
html2text {}
    
Offset 96, 35 lines modifiedOffset 96, 36 lines modified
96 Listing·of·files:96 Listing·of·files:
97 ····*·_\x8a_\x8d_\x8j_\x8a_\x8c_\x8e_\x8n_\x8c_\x8y_\x8__\x8l_\x8i_\x8s_\x8t_\x8._\x8p_\x8y97 ····*·_\x8a_\x8d_\x8j_\x8a_\x8c_\x8e_\x8n_\x8c_\x8y_\x8__\x8l_\x8i_\x8s_\x8t_\x8._\x8p_\x8y
98 *\x8**\x8**\x8**\x8*·A\x8As\x8ss\x8so\x8oc\x8ci\x8ia\x8at\x8ti\x8io\x8on\x8ns\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*98 *\x8**\x8**\x8**\x8*·A\x8As\x8ss\x8so\x8oc\x8ci\x8ia\x8at\x8ti\x8io\x8on\x8ns\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*
99 Examples·illustrating·the·usage·of·the·“association·object”·pattern,·where·an99 Examples·illustrating·the·usage·of·the·“association·object”·pattern,·where·an
100 intermediary·class·mediates·the·relationship·between·two·classes·that·are100 intermediary·class·mediates·the·relationship·between·two·classes·that·are
101 associated·in·a·many-to-many·pattern.101 associated·in·a·many-to-many·pattern.
102 Listing·of·files:102 Listing·of·files:
 103 ····*·_\x8d_\x8i_\x8c_\x8t_\x8__\x8o_\x8f_\x8__\x8s_\x8e_\x8t_\x8s_\x8__\x8w_\x8i_\x8t_\x8h_\x8__\x8d_\x8e_\x8f_\x8a_\x8u_\x8l_\x8t_\x8._\x8p_\x8y·-·An·advanced·association·proxy·example
 104 ······which·illustrates·nesting·of·association·proxies·to·produce·multi-level
 105 ······Python·collections,·in·this·case·a·dictionary·with·string·keys·and·sets
 106 ······of·integers·as·values,·which·conceal·the·underlying·mapped·classes.
103 ····*·_\x8b_\x8a_\x8s_\x8i_\x8c_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrate·a·many-to-many·relationship·between·an107 _\x8b_\x8a_\x8s_\x8i_\x8c_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrate·a·many-to-many·relationship·between·an
104 ······“Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price108 “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price·with
105 ······with·each·via·an·association·object·called·“OrderItem”109 each·via·an·association·object·called·“OrderItem”
106 _\x8d_\x8i_\x8c_\x8t_\x8__\x8o_\x8f_\x8__\x8s_\x8e_\x8t_\x8s_\x8__\x8w_\x8i_\x8t_\x8h_\x8__\x8d_\x8e_\x8f_\x8a_\x8u_\x8l_\x8t_\x8._\x8p_\x8y·-·An·advanced·association·proxy·example·which 
107 illustrates·nesting·of·association·proxies·to·produce·multi-level·Python 
108 collections,·in·this·case·a·dictionary·with·string·keys·and·sets·of·integers·as 
109 values,·which·conceal·the·underlying·mapped·classes. 
110 _\x8p_\x8r_\x8o_\x8x_\x8i_\x8e_\x8d_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Same·example·as·basic_association,·adding·in·usage·of110 _\x8p_\x8r_\x8o_\x8x_\x8i_\x8e_\x8d_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Same·example·as·basic_association,·adding·in·usage·of
111 _\x8s_\x8q_\x8l_\x8a_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y_\x8._\x8e_\x8x_\x8t_\x8._\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8p_\x8r_\x8o_\x8x_\x8y·to·make·explicit·references·to·OrderItem111 _\x8s_\x8q_\x8l_\x8a_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y_\x8._\x8e_\x8x_\x8t_\x8._\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8p_\x8r_\x8o_\x8x_\x8y·to·make·explicit·references·to·OrderItem
112 optional.112 optional.
113 *\x8**\x8**\x8**\x8*·A\x8As\x8sy\x8yn\x8nc\x8ci\x8io\x8o·I\x8In\x8nt\x8te\x8eg\x8gr\x8ra\x8at\x8ti\x8io\x8on\x8n_\x8?\x8·*\x8**\x8**\x8**\x8*113 *\x8**\x8**\x8**\x8*·A\x8As\x8sy\x8yn\x8nc\x8ci\x8io\x8o·I\x8In\x8nt\x8te\x8eg\x8gr\x8ra\x8at\x8ti\x8io\x8on\x8n_\x8?\x8·*\x8**\x8**\x8**\x8*
114 Examples·illustrating·the·asyncio·engine·feature·of·SQLAlchemy.114 Examples·illustrating·the·asyncio·engine·feature·of·SQLAlchemy.
115 Listing·of·files:115 Listing·of·files:
 116 ····*·_\x8g_\x8r_\x8e_\x8e_\x8n_\x8l_\x8e_\x8t_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the
 117 ······sqlalchemy.ext.asyncio.AsyncSession·object·for·asynchronous·ORM·use,
 118 ······including·the·optional·run_sync()·method.
116 ····*·_\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession119 _\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession
117 ······object·for·asynchronous·ORM·use.120 object·for·asynchronous·ORM·use.
 121 _\x8b_\x8a_\x8s_\x8i_\x8c_\x8._\x8p_\x8y·-·Illustrates·the·asyncio·engine·/·connection·interface.
118 _\x8g_\x8a_\x8t_\x8h_\x8e_\x8r_\x8__\x8o_\x8r_\x8m_\x8__\x8s_\x8t_\x8a_\x8t_\x8e_\x8m_\x8e_\x8n_\x8t_\x8s_\x8._\x8p_\x8y·-·Illustrates·how·to·run·many·statements·concurrently122 _\x8g_\x8a_\x8t_\x8h_\x8e_\x8r_\x8__\x8o_\x8r_\x8m_\x8__\x8s_\x8t_\x8a_\x8t_\x8e_\x8m_\x8e_\x8n_\x8t_\x8s_\x8._\x8p_\x8y·-·Illustrates·how·to·run·many·statements·concurrently
119 using·asyncio.gather()·along·many·asyncio·database·connections,·merging·ORM123 using·asyncio.gather()·along·many·asyncio·database·connections,·merging·ORM
120 results·into·a·single·AsyncSession.124 results·into·a·single·AsyncSession.
121 _\x8g_\x8r_\x8e_\x8e_\x8n_\x8l_\x8e_\x8t_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession 
122 object·for·asynchronous·ORM·use,·including·the·optional·run_sync()·method. 
123 _\x8b_\x8a_\x8s_\x8i_\x8c_\x8._\x8p_\x8y·-·Illustrates·the·asyncio·engine·/·connection·interface. 
124 _\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8__\x8w_\x8r_\x8i_\x8t_\x8e_\x8o_\x8n_\x8l_\x8y_\x8._\x8p_\x8y·-·Illustrates·using·w\x8wr\x8ri\x8it\x8te\x8e·o\x8on\x8nl\x8ly\x8y·r\x8re\x8el\x8la\x8at\x8ti\x8io\x8on\x8ns\x8sh\x8hi\x8ip\x8ps\x8s·for·simpler125 _\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8__\x8w_\x8r_\x8i_\x8t_\x8e_\x8o_\x8n_\x8l_\x8y_\x8._\x8p_\x8y·-·Illustrates·using·w\x8wr\x8ri\x8it\x8te\x8e·o\x8on\x8nl\x8ly\x8y·r\x8re\x8el\x8la\x8at\x8ti\x8io\x8on\x8ns\x8sh\x8hi\x8ip\x8ps\x8s·for·simpler
125 handling·of·ORM·collections·under·asyncio.126 handling·of·ORM·collections·under·asyncio.
126 *\x8**\x8**\x8**\x8*·D\x8Di\x8ir\x8re\x8ec\x8ct\x8te\x8ed\x8d·G\x8Gr\x8ra\x8ap\x8ph\x8hs\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*127 *\x8**\x8**\x8**\x8*·D\x8Di\x8ir\x8re\x8ec\x8ct\x8te\x8ed\x8d·G\x8Gr\x8ra\x8ap\x8ph\x8hs\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*
127 An·example·of·persistence·for·a·directed·graph·structure.·The·graph·is·stored128 An·example·of·persistence·for·a·directed·graph·structure.·The·graph·is·stored
128 as·a·collection·of·edges,·each·referencing·both·a·“lower”·and·an·“upper”·node129 as·a·collection·of·edges,·each·referencing·both·a·“lower”·and·an·“upper”·node
129 in·a·table·of·nodes.·Basic·persistence·and·querying·for·lower-·and·upper-130 in·a·table·of·nodes.·Basic·persistence·and·querying·for·lower-·and·upper-
130 neighbors·are·illustrated:131 neighbors·are·illustrated:
Offset 151, 23 lines modifiedOffset 152, 23 lines modified
151 The·_\x8d_\x8i_\x8s_\x8c_\x8r_\x8i_\x8m_\x8i_\x8n_\x8a_\x8t_\x8o_\x8r_\x8__\x8o_\x8n_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·and·_\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·scripts·are·modernized152 The·_\x8d_\x8i_\x8s_\x8c_\x8r_\x8i_\x8m_\x8i_\x8n_\x8a_\x8t_\x8o_\x8r_\x8__\x8o_\x8n_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·and·_\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·scripts·are·modernized
152 versions·of·recipes·presented·in·the·2007·blog·post·_\x8P_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8·_\x8A_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s153 versions·of·recipes·presented·in·the·2007·blog·post·_\x8P_\x8o_\x8l_\x8y_\x8m_\x8o_\x8r_\x8p_\x8h_\x8i_\x8c_\x8·_\x8A_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s
153 _\x8w_\x8i_\x8t_\x8h_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y.154 _\x8w_\x8i_\x8t_\x8h_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y.
154 Listing·of·files:155 Listing·of·files:
155 ····*·_\x8t_\x8a_\x8b_\x8l_\x8e_\x8__\x8p_\x8e_\x8r_\x8__\x8r_\x8e_\x8l_\x8a_\x8t_\x8e_\x8d_\x8._\x8p_\x8y·-·Illustrates·a·generic·association·which·persists156 ····*·_\x8t_\x8a_\x8b_\x8l_\x8e_\x8__\x8p_\x8e_\x8r_\x8__\x8r_\x8e_\x8l_\x8a_\x8t_\x8e_\x8d_\x8._\x8p_\x8y·-·Illustrates·a·generic·association·which·persists
156 ······association·objects·within·individual·tables,·each·one·generated·to157 ······association·objects·within·individual·tables,·each·one·generated·to
157 ······persist·those·objects·on·behalf·of·a·particular·parent·class.158 ······persist·those·objects·on·behalf·of·a·particular·parent·class.
158 _\x8t_\x8a_\x8b_\x8l_\x8e_\x8__\x8p_\x8e_\x8r_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrates·a·mixin·which·provides·a·generic 
159 association·via·a·individually·generated·association·tables·for·each·parent 
160 class.·The·associated·objects·themselves·are·persisted·in·a·single·table·shared 
161 among·all·parents. 
162 _\x8d_\x8i_\x8s_\x8c_\x8r_\x8i_\x8m_\x8i_\x8n_\x8a_\x8t_\x8o_\x8r_\x8__\x8o_\x8n_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrates·a·mixin·which·provides·a·generic159 _\x8d_\x8i_\x8s_\x8c_\x8r_\x8i_\x8m_\x8i_\x8n_\x8a_\x8t_\x8o_\x8r_\x8__\x8o_\x8n_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrates·a·mixin·which·provides·a·generic
163 association·using·a·single·target·table·and·a·single·association·table,160 association·using·a·single·target·table·and·a·single·association·table,
164 referred·to·by·all·parent·tables.·The·association·table·contains·a161 referred·to·by·all·parent·tables.·The·association·table·contains·a
165 “discriminator”·column·which·determines·what·type·of·parent·object·associates162 “discriminator”·column·which·determines·what·type·of·parent·object·associates
166 to·each·particular·row·in·the·association·table.163 to·each·particular·row·in·the·association·table.
 164 _\x8t_\x8a_\x8b_\x8l_\x8e_\x8__\x8p_\x8e_\x8r_\x8__\x8a_\x8s_\x8s_\x8o_\x8c_\x8i_\x8a_\x8t_\x8i_\x8o_\x8n_\x8._\x8p_\x8y·-·Illustrates·a·mixin·which·provides·a·generic
 165 association·via·a·individually·generated·association·tables·for·each·parent
 166 class.·The·associated·objects·themselves·are·persisted·in·a·single·table·shared
 167 among·all·parents.
167 _\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a·similar168 _\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a·similar
168 fashion·to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.·This·approach169 fashion·to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.·This·approach
169 bypasses·standard·referential·integrity·practices,·in·that·the·“foreign·key”170 bypasses·standard·referential·integrity·practices,·in·that·the·“foreign·key”
170 column·is·not·actually·constrained·to·refer·to·any·particular·table;·instead,171 column·is·not·actually·constrained·to·refer·to·any·particular·table;·instead,
171 in-application·logic·is·used·to·determine·which·table·is·referenced.172 in-application·logic·is·used·to·determine·which·table·is·referenced.
172 *\x8**\x8**\x8**\x8*·M\x8Ma\x8at\x8te\x8er\x8ri\x8ia\x8al\x8li\x8iz\x8ze\x8ed\x8d·P\x8Pa\x8at\x8th\x8hs\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*173 *\x8**\x8**\x8**\x8*·M\x8Ma\x8at\x8te\x8er\x8ri\x8ia\x8al\x8li\x8iz\x8ze\x8ed\x8d·P\x8Pa\x8at\x8th\x8hs\x8s_\x8?\x8·*\x8**\x8**\x8**\x8*
173 Illustrates·the·“materialized·paths”·pattern·for·hierarchical·data·using·the174 Illustrates·the·“materialized·paths”·pattern·for·hierarchical·data·using·the
Offset 220, 28 lines modifiedOffset 221, 29 lines modified
220 $·python·-m·examples.performance·bulk_inserts·\221 $·python·-m·examples.performance·bulk_inserts·\
221 ····--dburl·mysql+mysqldb://scott:tiger@localhost/test·\222 ····--dburl·mysql+mysqldb://scott:tiger@localhost/test·\
222 ····--profile·--num·1000223 ····--profile·--num·1000
223 See·also224 See·also
224 _\x8H_\x8o_\x8w_\x8·_\x8c_\x8a_\x8n_\x8·_\x8I_\x8·_\x8p_\x8r_\x8o_\x8f_\x8i_\x8l_\x8e_\x8·_\x8a_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y_\x8·_\x8p_\x8o_\x8w_\x8e_\x8r_\x8e_\x8d_\x8·_\x8a_\x8p_\x8p_\x8l_\x8i_\x8c_\x8a_\x8t_\x8i_\x8o_\x8n_\x8?225 _\x8H_\x8o_\x8w_\x8·_\x8c_\x8a_\x8n_\x8·_\x8I_\x8·_\x8p_\x8r_\x8o_\x8f_\x8i_\x8l_\x8e_\x8·_\x8a_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y_\x8·_\x8p_\x8o_\x8w_\x8e_\x8r_\x8e_\x8d_\x8·_\x8a_\x8p_\x8p_\x8l_\x8i_\x8c_\x8a_\x8t_\x8i_\x8o_\x8n_\x8?
225 *\x8**\x8**\x8*·F\x8Fi\x8il\x8le\x8e·L\x8Li\x8is\x8st\x8ti\x8in\x8ng\x8g_\x8?\x8·*\x8**\x8**\x8*226 *\x8**\x8**\x8*·F\x8Fi\x8il\x8le\x8e·L\x8Li\x8is\x8st\x8ti\x8in\x8ng\x8g_\x8?\x8·*\x8**\x8**\x8*
226 Listing·of·files:227 Listing·of·files:
 228 ····*·_\x8__\x8__\x8m_\x8a_\x8i_\x8n_\x8__\x8__\x8._\x8p_\x8y·-·Allows·the·examples/performance·package·to·be·run·as·a
 229 ······script.
227 ····*·_\x8b_\x8u_\x8l_\x8k_\x8__\x8u_\x8p_\x8d_\x8a_\x8t_\x8e_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·will·illustrate·different·ways·to 
228 ······UPDATE·a·large·number·of·rows·in·bulk·(under·construction!·there’s·just 
229 ······one·test·at·the·moment) 
230 _\x8l_\x8a_\x8r_\x8g_\x8e_\x8__\x8r_\x8e_\x8s_\x8u_\x8l_\x8t_\x8s_\x8e_\x8t_\x8s_\x8._\x8p_\x8y·-·In·this·series·of·tests,·we·are·looking·at·time·to·load·a230 _\x8l_\x8a_\x8r_\x8g_\x8e_\x8__\x8r_\x8e_\x8s_\x8u_\x8l_\x8t_\x8s_\x8e_\x8t_\x8s_\x8._\x8p_\x8y·-·In·this·series·of·tests,·we·are·looking·at·time·to·load·a
231 large·number·of·very·small·and·simple·rows.231 large·number·of·very·small·and·simple·rows.
232 _\x8s_\x8i_\x8n_\x8g_\x8l_\x8e_\x8__\x8i_\x8n_\x8s_\x8e_\x8r_\x8t_\x8s_\x8._\x8p_\x8y·-·In·this·series·of·tests,·we’re·looking·at·a·method·that232 _\x8s_\x8i_\x8n_\x8g_\x8l_\x8e_\x8__\x8i_\x8n_\x8s_\x8e_\x8r_\x8t_\x8s_\x8._\x8p_\x8y·-·In·this·series·of·tests,·we’re·looking·at·a·method·that
233 inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to233 inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to
234 essentially·a·“closed”·state.·This·would·be·analogous·to·an·API·call·that234 essentially·a·“closed”·state.·This·would·be·analogous·to·an·API·call·that
235 starts·up·a·database·connection,·inserts·the·row,·commits·and·closes.235 starts·up·a·database·connection,·inserts·the·row,·commits·and·closes.
236 _\x8__\x8__\x8m_\x8a_\x8i_\x8n_\x8__\x8__\x8._\x8p_\x8y·-·Allows·the·examples/performance·package·to·be·run·as·a·script. 
237 _\x8s_\x8h_\x8o_\x8r_\x8t_\x8__\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·illustrates·different·ways·to·SELECT·a236 _\x8s_\x8h_\x8o_\x8r_\x8t_\x8__\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·illustrates·different·ways·to·SELECT·a
238 single·record·by·primary·key237 single·record·by·primary·key
239 _\x8b_\x8u_\x8l_\x8k_\x8__\x8i_\x8n_\x8s_\x8e_\x8r_\x8t_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·illustrates·different·ways·to·INSERT·a238 _\x8b_\x8u_\x8l_\x8k_\x8__\x8i_\x8n_\x8s_\x8e_\x8r_\x8t_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·illustrates·different·ways·to·INSERT·a
240 large·number·of·rows·in·bulk.239 large·number·of·rows·in·bulk.
 240 _\x8b_\x8u_\x8l_\x8k_\x8__\x8u_\x8p_\x8d_\x8a_\x8t_\x8e_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·will·illustrate·different·ways·to·UPDATE
 241 a·large·number·of·rows·in·bulk·(under·construction!·there’s·just·one·test·at
 242 the·moment)
241 *\x8**\x8**\x8*·R\x8Ru\x8un\x8nn\x8ni\x8in\x8ng\x8g·a\x8al\x8ll\x8l·t\x8te\x8es\x8st\x8ts\x8s·w\x8wi\x8it\x8th\x8h·t\x8ti\x8im\x8me\x8e_\x8?\x8·*\x8**\x8**\x8*243 *\x8**\x8**\x8*·R\x8Ru\x8un\x8nn\x8ni\x8in\x8ng\x8g·a\x8al\x8ll\x8l·t\x8te\x8es\x8st\x8ts\x8s·w\x8wi\x8it\x8th\x8h·t\x8ti\x8im\x8me\x8e_\x8?\x8·*\x8**\x8**\x8*
242 This·is·the·default·form·of·run:244 This·is·the·default·form·of·run:
243 $·python·-m·examples.performance·single_inserts245 $·python·-m·examples.performance·single_inserts
244 Tests·to·run:·test_orm_commit,·test_bulk_save,246 Tests·to·run:·test_orm_commit,·test_bulk_save,
245 ··············test_bulk_insert_dictionaries,·test_core,247 ··············test_bulk_insert_dictionaries,·test_core,
246 ··············test_core_query_caching,·test_dbapi_raw_w_connect,248 ··············test_core_query_caching,·test_dbapi_raw_w_connect,
247 ··············test_dbapi_raw_w_pool249 ··············test_dbapi_raw_w_pool
Offset 472, 27 lines modifiedOffset 474, 28 lines modified
472 Several·examples·that·illustrate·the·technique·of·intercepting·changes·that474 Several·examples·that·illustrate·the·technique·of·intercepting·changes·that
473 would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning·it·into475 would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning·it·into
474 an·INSERT·of·a·new·row,·leaving·the·previous·row·intact·as·a·historical476 an·INSERT·of·a·new·row,·leaving·the·previous·row·intact·as·a·historical
475 version.477 version.
476 Compare·to·the·_\x8V_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8i_\x8n_\x8g_\x8·_\x8w_\x8i_\x8t_\x8h_\x8·_\x8a_\x8·_\x8H_\x8i_\x8s_\x8t_\x8o_\x8r_\x8y_\x8·_\x8T_\x8a_\x8b_\x8l_\x8e·example·which·writes·a·history478 Compare·to·the·_\x8V_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8i_\x8n_\x8g_\x8·_\x8w_\x8i_\x8t_\x8h_\x8·_\x8a_\x8·_\x8H_\x8i_\x8s_\x8t_\x8o_\x8r_\x8y_\x8·_\x8T_\x8a_\x8b_\x8l_\x8e·example·which·writes·a·history
477 row·to·a·separate·history·table.479 row·to·a·separate·history·table.
478 Listing·of·files:480 Listing·of·files:
479 ····*·_\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8e_\x8d_\x8__\x8m_\x8a_\x8p_\x8._\x8p_\x8y·-·A·variant·of·the·versioned_rows·example·built·around 
480 ······the·concept·of·a·“vertical·table”·structure,·like·those·illustrated·in 
481 ······_\x8V_\x8e_\x8r_\x8t_\x8i_\x8c_\x8a_\x8l_\x8·_\x8A_\x8t_\x8t_\x8r_\x8i_\x8b_\x8u_\x8t_\x8e_\x8·_\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·examples. 
482 _\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8e_\x8d_\x8__\x8r_\x8o_\x8w_\x8s_\x8._\x8p_\x8y·-·Illustrates·a·method·to·intercept·changes·on·objects, 
483 turning·an·UPDATE·statement·on·a·single·row·into·an·INSERT·statement,·so·that·a 
484 new·row·is·inserted·with·the·new·data,·keeping·the·old·row·intact. 
485 _.v_.e_.r_.s_.i_.o_.n_.e_.d_.__.u_.p_.d_.a_.t_.e_.__.o_.l_.d_.__.r_.o_.w_.._.p_.y·-·Illustrates·the·same·UPDATE·into·INSERT·technique481 ····*·_.v_.e_.r_.s_.i_.o_.n_.e_.d_.__.u_.p_.d_.a_.t_.e_.__.o_.l_.d_.__.r_.o_.w_.._.p_.y·-·Illustrates·the·same·UPDATE·into·INSERT
486 of·versioned_rows.py,·but·also·emits·an·UPDATE·on·the·o.ol.ld.d·row·to·affect·a482 ······technique·of·versioned_rows.py,·but·also·emits·an·UPDATE·on·the·o.ol.ld.d·row
 483 ······to·affect·a·change·in·timestamp.·Also·includes·a
487 change·in·timestamp.·Also·includes·a·_.S_.e_.s_.s_.i_.o_.n_.E_.v_.e_.n_.t_.s_.._.d_.o_.__.o_.r_.m_.__.e_.x_.e_.c_.u_.t_.e_.(_.)·hook·to484 ······_.S_.e_.s_.s_.i_.o_.n_.E_.v_.e_.n_.t_.s_.._.d_.o_.__.o_.r_.m_.__.e_.x_.e_.c_.u_.t_.e_.(_.)·hook·to·limit·queries·to·only·the·most
488 limit·queries·to·only·the·most·recent·version.485 ······recent·version.
489 _\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8e_\x8d_\x8__\x8r_\x8o_\x8w_\x8s_\x8__\x8w_\x8__\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8i_\x8d_\x8._\x8p_\x8y·-·Illustrates·a·method·to·intercept·changes·on486 _\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8e_\x8d_\x8__\x8r_\x8o_\x8w_\x8s_\x8__\x8w_\x8__\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8i_\x8d_\x8._\x8p_\x8y·-·Illustrates·a·method·to·intercept·changes·on
490 objects,·turning·an·UPDATE·statement·on·a·single·row·into·an·INSERT·statement,487 objects,·turning·an·UPDATE·statement·on·a·single·row·into·an·INSERT·statement,
491 so·that·a·new·row·is·inserted·with·the·new·data,·keeping·the·old·row·intact.488 so·that·a·new·row·is·inserted·with·the·new·data,·keeping·the·old·row·intact.
Max diff block lines reached; 6980/17819 bytes (39.17%) of diff not shown.