Offset 1, 5 lines modified | Offset 1, 5 lines modified | ||
1 | · | 1 | ·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.deb | 2 | ·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.deb | 3 | ·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.deb | 4 | ·06b6365d77f51caac8542c94ebe1ba72·1210228·python·optional·python3-sqlalchemy_2.0.40+ds1-1_all.deb |
Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
1 | -rw-r--r--···0········0········0········4·2025-02-06·11:19:07.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2025-02-06·11:19:07.000000·debian-binary |
2 | -rw-r--r--···0········0········0····136 | 2 | -rw-r--r--···0········0········0····13676·2025-02-06·11:19:07.000000·control.tar.xz |
3 | -rw-r--r--···0········0········0··3973 | 3 | -rw-r--r--···0········0········0··3973684·2025-02-06·11:19:07.000000·data.tar.xz |
Offset 592, 15 lines modified | Offset 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 | 599 | <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·its | 600 | 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·being | 601 | namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being |
602 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy | 602 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy |
603 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing | 603 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing |
604 | a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the | 604 | 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·unicode | 605 | “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·if | 606 | conversion·functions·are·no·longer·necessary·and·are·disabled·if |
Offset 318, 15 lines modified | Offset 318, 15 lines modified | ||
318 | ······················#·_\x8o_\x8r_\x8a_\x8c_\x8l_\x8e | 318 | ······················#·_\x8o_\x8r_\x8a_\x8c_\x8l_\x8e |
319 | ······················#·_\x8t_\x8e_\x8s_\x8t_\x8s | 319 | ······················#·_\x8t_\x8e_\x8s_\x8t_\x8s |
320 | ······················#·_\x8m_\x8i_\x8s_\x8c | 320 | ······················#·_\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,·2017 | 323 | 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 | 325 | ····*·[\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_Oracle | 326 | ······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,·which | 327 | ······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·on | 328 | ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on |
329 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which | 329 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which |
330 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance | 330 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance |
331 | ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been | 331 | ······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·functions | 332 | ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions |
Offset 875, 15 lines modified | Offset 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 | 882 | <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·its | 883 | 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·being | 884 | namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being |
885 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy | 885 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy |
886 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing | 886 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing |
887 | a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the | 887 | 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·unicode | 888 | “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·if | 889 | conversion·functions·are·no·longer·necessary·and·are·disabled·if |
Offset 496, 15 lines modified | Offset 496, 15 lines modified | ||
496 | ······the·same·PRECEDING·or·FOLLOWING·keywords·in·a·range·by·allowing·for·the | 496 | ······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_\x83 | 499 | ······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,·2017 | 501 | 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 | 503 | ····*·[\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_Oracle | 504 | ······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,·which | 505 | ······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·on | 506 | ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on |
507 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which | 507 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which |
508 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance | 508 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance |
509 | ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been | 509 | ······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·functions | 510 | ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions |
Offset 2977, 15 lines modified | Offset 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 | 2984 | <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·its | 2985 | 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·being | 2986 | namespace,··which·was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being |
2987 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy | 2987 | turned·on·unconditionally,·which·invokes·functions·on·the·SQLAlchemy |
2988 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing | 2988 | side·which·convert·all·strings·to·unicode·unconditionally·and·causing |
2989 | a·performance·impact.··In·fact,·per·cx_Oracle’s·author·the | 2989 | 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·unicode | 2990 | “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·if | 2991 | conversion·functions·are·no·longer·necessary·and·are·disabled·if |
Offset 1879, 15 lines modified | Offset 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]·_\x8¶ | 1880 | [\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·clustered | 1882 | index·that·is·implicitly·present·on·a·table·that·does·not·specify·a·clustered |
1883 | index. | 1883 | index. |
1884 | References:·_\x8#_\x84_\x80_\x85_\x89 | 1884 | 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 | 1886 | ····*·[\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_Oracle | 1887 | ······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,·which | 1888 | ······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·on | 1889 | ······was·interpreted·as·cx_Oracle’s·“WITH_UNICODE”·mode·being·turned·on |
1890 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which | 1890 | ······unconditionally,·which·invokes·functions·on·the·SQLAlchemy·side·which |
1891 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance | 1891 | ······convert·all·strings·to·unicode·unconditionally·and·causing·a·performance |
1892 | ······impact.·In·fact,·per·cx_Oracle’s·author·the·“WITH_UNICODE”·mode·has·been | 1892 | ······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·functions | 1893 | ······removed·entirely·as·of·5.1,·so·the·expensive·unicode·conversion·functions |
Offset 1803, 30 lines modified | Offset 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-1 | 1816 | <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·inline | 1817 | cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline |
1812 | with·other·result·columns,·rather·than·performing·a·separate·fetch.·As | 1818 | 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·blank | 1820 | <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·with | 1821 | 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·external | 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·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 modified | Offset 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·a | 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·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 | 2211 | <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·loaded | 2212 | <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’s | 2213 | unconditionally·upon·making·use·of·that·dialect,·pulling·in·SQLAlchemy’s |
2214 | testing·framework·as·well·as·the·ORM·into·the·module·import·space.···This | 2214 | 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·on | 2216 | 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> |
Offset 1144, 28 lines modified | Offset 1144, 28 lines modified | ||
1144 | ······References:·_\x8#_\x85_\x82_\x85_\x85 | 1144 | ······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]·_\x8¶ | 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]·_\x8¶ |
1146 | Fix·a·regression·introduced·by·the·reflection·of·computed·column·in·MSSQL·when | 1146 | 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·concat | 1147 | using·SQL·server·versions·before·2012,·which·does·not·support·the·concat |
1148 | function. | 1148 | function. |
1149 | References:·_\x8#_\x85_\x82_\x87_\x81 | 1149 | 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]·_\x8¶ | 1151 | ····*·[\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 | 1152 | ······Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column |
1162 | handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential | 1153 | ······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_\x86 | 1155 | ······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]·_\x8¶ | 1166 | ····*·[\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·fall | 1168 | ······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_\x88 | 1170 | ······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 modified | Offset 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_\x86 | 1410 | ······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]·_\x8¶ | 1412 | ····*·[\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·key | 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·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_\x84 | 1415 | ······References:·_\x8#_\x85_\x81_\x81_\x84 |
1416 | [\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e | 1416 | [\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·where | 1417 | 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·upon | 1418 | a·testing-related·module·per·dialect·would·be·loaded·unconditionally·upon |
1419 | making·use·of·that·dialect,·pulling·in·SQLAlchemy’s·testing·framework·as·well | 1419 | 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·startup | 1420 | 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·additional | 1421 | 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_\x80 | 1423 | References:·_\x8#_\x85_\x81_\x88_\x80 |
Offset 3140, 36 lines modified | Offset 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.·The | 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.·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·for | 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·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- | 3147 | <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·appropriate | 3148 | <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·present | 3149 | entity·to·filter·from,·in·the·case·where·a·“secondary”·table·were·present |
3158 | in·the·relationship·being·queried·and·the·mapping·were·against·something | 3150 | 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- | 3155 | <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·for | 3156 | 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·would | 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·would |
3170 | not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed | 3170 | not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed |
3171 | “polymorphic_on”·column.···Additionally·added·test·support·for·a·wider | 3171 | “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 modified | Offset 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 | 4903 | <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·system | 4904 | DDL-name·parameters·as·used·in·reflection·queries·against·Oracle·system |
4905 | views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable | 4905 | views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable |
4906 | indexing·to·take·place·against·these·columns,·as·they·previously·would·be | 4906 | 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·with | 4908 | 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·DDL | 4910 | Additionally,·test·support·has·been·enabled·for·Unicode-named·DDL |
Offset 5619, 24 lines modified | Offset 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- | 5626 | <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·enable | 5627 | <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”·and | 5628 | or·disable·“lambda·caching”·of·statements·within·the·“lazyload”·and |
5638 | “selectinload”·loader·strategies;·this·is·separate·from·the·more | 5629 | “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-one | 5631 | 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·any | 5632 | SQL·queries,·which·was·an·implementation·quirk·that·doesn’t·exist·for·any |
5642 | other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader | 5633 | other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader |
Offset 5646, 29 lines modified | Offset 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·this | 5637 | 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·case | 5638 | 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·likely | 5639 | 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- | 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·base | 5645 | 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·implement | 5647 | subclasses·such·as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement |
5657 | positional·arguments·when·they·call·into·the·superclass·method,·and·can | 5648 | 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- | 5653 | <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·a | 5654 | 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”·use | 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”·use |
5669 | case·where·an·error·was·raised·if·the·statement·were·against·a | 5669 | 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·multiple | 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·multiple |
Offset 6512, 15 lines modified | Offset 6512, 15 lines modified | ||
6512 | synonyms·can·be·established·linking·to·these·constructs·which·work | 6512 | 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. |
Offset 2084, 31 lines modified | Offset 2084, 31 lines modified | ||
2084 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 2084 | [\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·and | 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·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·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·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-only | 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-only |
2089 | selectables. | 2089 | selectables. |
2090 | References:·_\x8#_\x87_\x88_\x86_\x81 | 2090 | 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]·_\x8¶ | 2091 | [\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·case | 2093 | 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·and | 2094 | 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_\x88 | 2096 | References:·_\x8#_\x87_\x88_\x86_\x88 |
2104 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 2097 | [\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·the | 2098 | 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_\x81 | 2100 | 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]·_\x8¶ | 2108 | [\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·with | 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·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·this | 2111 | Additionally·added·test·support·for·a·wider·variety·of·usage·patterns·with·this |
2112 | construct. | 2112 | construct. |
2113 | References:·_\x8#_\x87_\x87_\x89_\x89 | 2113 | References:·_\x8#_\x87_\x87_\x89_\x89 |
2114 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 2114 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
Offset 3307, 15 lines modified | Offset 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]·_\x8¶ | 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]·_\x8¶ |
3308 | ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned | 3308 | ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned |
3309 | ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL | 3309 | ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL |
3310 | ······Server·session·(connection).·An·extra·check·is·now·performed·to·ensure | 3310 | ······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_\x80 | 3312 | ······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 | 3314 | ····*·[\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·views | 3316 | ······name·parameters·as·used·in·reflection·queries·against·Oracle·system·views |
3317 | ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to | 3317 | ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to |
3318 | ······take·place·against·these·columns,·as·they·previously·would·be·implicitly | 3318 | ······take·place·against·these·columns,·as·they·previously·would·be·implicitly |
3319 | ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these | 3319 | ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these |
3320 | ······columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with | 3320 | ······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 modified | Offset 3815, 51 lines modified | ||
3815 | the·INSERT·thus·triggering·SQLAlchemy’s·feature·of·setting·IDENTITY·INSERT·to | 3815 | 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·be | 3816 | “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_\x88 | 3818 | 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,·2021 | 3820 | 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]·_\x8¶ | 3822 | ····*·[\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, | 3823 | ······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 | 3824 | ······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 | 3825 | ······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 | 3832 | ······removed;·based·on·analysis·of·some·end-user·cases,·this·warning·doesn’t | |
3840 | 3833 | ······suggest·any·significant·issue.·While·setting·bake_queries=False·for·such | |
3841 | 3834 | ······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 | 3835 | ······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·cach | 3836 | ······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_\x87 | 3838 | ······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]·_\x8¶ | 3839 | [\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·are | 3840 | 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·such | 3841 | 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·arguments | 3842 | 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·same | 3843 | 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_\x85 | 3845 | 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]·_\x8¶ | 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]·_\x8¶ |
3854 | Fixed·issue·where·query·production·for·joinedload·against·a·complex·left·hand | 3847 | 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_\x85 | 3850 | 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]·_\x8¶ | 3859 | [\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·case | 3860 | 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_\x81 | 3863 | References:·_\x8#_\x86_\x85_\x89_\x81 |
3863 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 3864 | [\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·would | 3865 | 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 modified | Offset 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·be | 4430 | ······assocaitionproxy·is·set·up·completely,·including·that·synonyms·can·be |
4430 | ······established·linking·to·these·constructs·which·work·fully.·This·is·a | 4431 | ······established·linking·to·these·constructs·which·work·fully.·This·is·a |
4431 | ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it | 4432 | ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it |
4432 | ······did·not·fail·in·every·scenario,·explicit·support·for·assoc·proxy·and | 4433 | ······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_\x87 | 4435 | ······References:·_\x8#_\x86_\x82_\x86_\x87 |
Max diff block lines reached; 3529/13354 bytes (26.43%) of diff not shown. |
Offset 2623, 32 lines modified | Offset 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- | 2637 | <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·values | 2638 | 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·bound | 2640 | construct.··The·new·logic·changes·the·approach·by·which·the·new·bound |
2634 | parameter·values·are·associated·with·the·statement,·avoiding·the·need·to | 2641 | parameter·values·are·associated·with·the·statement,·avoiding·the·need·to |
2635 | deep-copy·the·statement·which·can·result·in·a·significant·performance | 2642 | deep-copy·the·statement·which·can·result·in·a·significant·performance |
2636 | penalty·for·very·deep·/·complex·SQL·constructs.··The·new·approach·no·longer | 2643 | 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·option | 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·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>.·When | 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>.·When |
Offset 2881, 15 lines modified | Offset 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 | 2888 | <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·both | 2889 | 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.·The | 2890 | cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.·The |
2891 | setting·of·50·could·cause·significant·performance·regressions·compared·to | 2891 | setting·of·50·could·cause·significant·performance·regressions·compared·to |
2892 | when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of·rows·over | 2892 | 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 modified | Offset 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·dataclasses | 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·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·the | 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·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·courtesy | 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·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- | 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·the | 7131 | annotation·for·a·column-based·attribute·would·silently·fail·to·map·the |
7142 | attribute,·rather·than·reporting·an·exception;·an·informative·exception | 7132 | 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- | 7137 | <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·correctly | 7138 | 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·correctly | 7139 | 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·using | 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·using |
7156 | plain·dataclass·fields·with·the·<code·class="docutils·literal·notranslate"><span·class="pre">__allow_unmapped__</span></code>·directive·in·a | 7156 | 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·for | 7157 | 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·inappropriately | 7158 | 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·the | 7159 | 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 modified | Offset 9002, 15 lines modified | ||
9002 | that·may·refer·to·additional·tables·within·the·WHERE·criteria·of·the | 9002 | that·may·refer·to·additional·tables·within·the·WHERE·criteria·of·the |
9003 | statement·without·the·need·to·use·subqueries.·This·syntax·is·invoked | 9003 | 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·than | 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·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. |
Offset 1728, 30 lines modified | Offset 1728, 29 lines modified | ||
1728 | ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded | 1728 | ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded |
1729 | ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to | 1729 | ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to |
1730 | ······cascading·failures. | 1730 | ······cascading·failures. |
1731 | ······References:·_\x8#_\x81_\x81_\x81_\x88_\x87 | 1731 | ······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,·2024 | 1733 | 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]·_\x8¶ | 1735 | ····*·[\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·a | 1736 | ······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·the | 1737 | ······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, | 1738 | ······“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_\x8 | 1749 | 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]·_\x8¶ | 1751 | ····*·[\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·option | 1752 | ······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,·the | 1753 | ······_\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·unconditionally | 1754 | ······cursor.rowcount·attribute·from·the·DBAPI·cursor·will·be·unconditionally |
1756 | ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI | 1755 | ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI |
1757 | ······offers·for·any·kind·of·statement·will·be·available·using·the | 1756 | ······offers·for·any·kind·of·statement·will·be·available·using·the |
Offset 1898, 15 lines modified | Offset 1897, 15 lines modified | ||
1898 | ······Fixed·an·issue·regarding·the·use·of·the·_\x8U_\x8u_\x8i_\x8d·datatype·with·the | 1897 | ······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)·would | 1899 | ······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·drivers | 1901 | ······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 | 1904 | ····*·[\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·value | 1905 | ······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·both | 1906 | ······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·regressions | 1908 | ······The·setting·of·50·could·cause·significant·performance·regressions |
1910 | ······compared·to·when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of | 1909 | ······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_\x87 | 1911 | ······References:·_\x8#_\x81_\x80_\x88_\x87_\x87 |
Offset 4793, 33 lines modified | Offset 4792, 33 lines modified | ||
4793 | References:·_\x8#_\x88_\x88_\x85_\x89 | 4792 | References:·_\x8#_\x88_\x88_\x85_\x89 |
4794 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 4793 | [\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·constructs | 4794 | 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·Python | 4795 | 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_\x8s | 4796 | 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_\x85 | 4798 | 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]·_\x8¶ | 4799 | [\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·a | 4800 | 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·than | 4801 | 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_\x88 | 4803 | References:·_\x8#_\x88_\x88_\x88_\x88 |
4813 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 4804 | [\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·as | 4805 | 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·in | 4806 | Mapped[Dict[str,·str]·|·None],·would·not·be·correctly·interpreted·in |
4816 | Declarative·ORM·mappings.·Support·to·correctly·“de-optionalize”·this·type | 4807 | 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_\x87 | 4809 | 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]·_\x8¶ | 4818 | [\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·dataclass | 4819 | 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·a | 4820 | 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·raw | 4821 | dataclass·with·the·correct·class-level·state·for·those·fields,·copying·the·raw |
4823 | Field·object·to·the·class·inappropriately·after·dataclasses·itself·had·replaced | 4822 | 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_\x80 | 4824 | References:·_\x8#_\x88_\x88_\x88_\x80 |
Offset 6194, 38 lines modified | Offset 6193, 38 lines modified | ||
6194 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 6193 | [\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·that | 6194 | The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements·that |
6196 | may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement | 6195 | may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement |
6197 | without·the·need·to·use·subqueries.·This·syntax·is·invoked·automatically·when | 6196 | 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·or | 6197 | 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_\x85 | 6199 | 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]·_\x8¶ | 6200 | [\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·not | 6201 | 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·workarounds | 6203 | 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·only | 6204 | 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·and | 6205 | 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·otherwise | 6207 | 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·as | 6208 | 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·related | 6209 | 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·significant | 6210 | datatypes,·just·without·the·ability·to·maintain·precision·beyond·15·significant |
6222 | digits·when·using·SQLite,·unless·alternate·representations·such·as·strings·are | 6211 | 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. |
Offset 299, 46 lines modified | Offset 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·two | 303 | 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·which | 306 | <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·Python | 307 | illustrates·nesting·of·association·proxies·to·produce·multi-level·Python |
312 | collections,·in·this·case·a·dictionary·with·string·keys·and·sets·of·integers | 308 | 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·in | 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·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·references | 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·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>·object | 329 | <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·single | 335 | 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·handling | 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·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 modified | Offset 382, 26 lines modified | ||
382 | are·modernized·versions·of·recipes·presented·in·the·2007·blog·post | 382 | 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·association | 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·association |
386 | objects·within·individual·tables,·each·one·generated·to·persist | 386 | 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·association | 389 | <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·table | 391 | referred·to·by·all·parent·tables.··The·association·table |
397 | contains·a·“discriminator”·column·which·determines·what·type·of | 392 | contains·a·“discriminator”·column·which·determines·what·type·of |
398 | parent·object·associates·to·each·particular·row·in·the·association | 393 | 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·fashion | 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·fashion |
402 | to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This | 402 | to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This |
403 | approach·bypasses·standard·referential·integrity | 403 | approach·bypasses·standard·referential·integrity |
404 | practices,·in·that·the·“foreign·key”·column·is·not·actually | 404 | 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 modified | Offset 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·number | 486 | <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·row | 489 | <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·a | 490 | within·a·distinct·transaction,·and·afterwards·returns·to·essentially·a |
492 | “closed”·state.···This·would·be·analogous·to·an·API·call·that·starts·up | 491 | “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·single | 494 | <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·number | 497 | <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 modified | Offset 756, 31 lines modified | ||
756 | <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes | 756 | <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes |
Max diff block lines reached; 12718/22893 bytes (55.55%) of diff not shown. |
Offset 96, 35 lines modified | Offset 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_\x8y | 97 | ····*·_\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·an | 99 | Examples·illustrating·the·usage·of·the·“association·object”·pattern,·where·an |
100 | intermediary·class·mediates·the·relationship·between·two·classes·that·are | 100 | 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 | 107 | _\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 | 108 | “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price·with | |
105 | 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·of | 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·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·OrderItem | 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·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 | 119 | _\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession | |
117 | 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·concurrently | 122 | _\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·ORM | 123 | 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·simpler | 125 | _\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·stored | 128 | 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”·node | 129 | 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 modified | Offset 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·modernized | 152 | 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_\x8s | 153 | 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·persists | 156 | ····*·_\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·to | 157 | ······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·generic | 159 | _\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·a | 161 | referred·to·by·all·parent·tables.·The·association·table·contains·a |
165 | “discriminator”·column·which·determines·what·type·of·parent·object·associates | 162 | “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·similar | 168 | _\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·approach | 169 | 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·the | 174 | Illustrates·the·“materialized·paths”·pattern·for·hierarchical·data·using·the |
Offset 220, 28 lines modified | Offset 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·1000 | 223 | ····--profile·--num·1000 |
223 | See·also | 224 | 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·a | 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·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·that | 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·that |
233 | inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to | 233 | inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to |
234 | essentially·a·“closed”·state.·This·would·be·analogous·to·an·API·call·that | 234 | 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·a | 236 | _\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·key | 237 | 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·a | 238 | _\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_inserts | 245 | $·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_pool | 249 | ··············test_dbapi_raw_w_pool |
Offset 472, 27 lines modified | Offset 474, 28 lines modified | ||
472 | Several·examples·that·illustrate·the·technique·of·intercepting·changes·that | 474 | 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·into | 475 | 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·historical | 476 | 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·history | 478 | 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 | 481 | ····*·_.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 | 482 | ······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 | 484 | ······_.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 | 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·on | 486 | _\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. |