Offset 1, 5 lines modified | Offset 1, 5 lines modified | ||
1 | · | 1 | ·9268b23d63d1364299829bcc535ba016·3956504·doc·optional·python-sqlalchemy-doc_2.0.32+ds1-1_all.deb |
2 | ·69fa09bb0f2aa18b40540e614080e941·899648·debug·optional·python3-sqlalchemy-ext-dbgsym_2.0.32+ds1-1_amd64.deb | 2 | ·69fa09bb0f2aa18b40540e614080e941·899648·debug·optional·python3-sqlalchemy-ext-dbgsym_2.0.32+ds1-1_amd64.deb |
3 | ·3fe81d4456dcd3d4ffcac6ae59087802·140544·python·optional·python3-sqlalchemy-ext_2.0.32+ds1-1_amd64.deb | 3 | ·3fe81d4456dcd3d4ffcac6ae59087802·140544·python·optional·python3-sqlalchemy-ext_2.0.32+ds1-1_amd64.deb |
4 | ·0955e7f12a0b73c1ab8406c88fbab7d2·1196068·python·optional·python3-sqlalchemy_2.0.32+ds1-1_all.deb | 4 | ·0955e7f12a0b73c1ab8406c88fbab7d2·1196068·python·optional·python3-sqlalchemy_2.0.32+ds1-1_all.deb |
Offset 1, 3 lines modified | Offset 1, 3 lines modified | ||
1 | -rw-r--r--···0········0········0········4·2024-08-23·07:52:58.000000·debian-binary | 1 | -rw-r--r--···0········0········0········4·2024-08-23·07:52:58.000000·debian-binary |
2 | -rw-r--r--···0········0········0····1392 | 2 | -rw-r--r--···0········0········0····13920·2024-08-23·07:52:58.000000·control.tar.xz |
3 | -rw-r--r--···0········0········0··3942 | 3 | -rw-r--r--···0········0········0··3942392·2024-08-23·07:52:58.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]·[ | 599 | <li><p·class="caption"·id="change-1.0.19-0"><span·class="target"·id="change-ec8fd72ca0ab2d0123169536543fb6cd"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ec8fd72ca0ab2d0123169536543fb6cd">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·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[ | 325 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\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]·[ | 882 | <li><p·class="caption"·id="change-1.1.13-0"><span·class="target"·id="change-91e9180bc7f72ab73ee81944ee6c0b5b"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-91e9180bc7f72ab73ee81944ee6c0b5b">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·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[ | 503 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\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]·[ | 2984 | <li><p·class="caption"·id="change-1.2.0b3-43"><span·class="target"·id="change-7cb9a3370310381d19eb1a17c5a84a91"><strong>[oracle]·[performance]·[bug]·[py2k]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-7cb9a3370310381d19eb1a17c5a84a91">¶</a></span><p>Fixed·performance·regression·caused·by·the·fix·for·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/3937">#3937</a>·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[ | 1886 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·[\x8[p\x8py\x8y2\x82k\x8k]\x8]·_\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> | ||
1816 | <li><p·class="caption"·id="change-1.3.17-1 | 1810 | <li><p·class="caption"·id="change-1.3.17-14"><span·class="target"·id="change-cc5a1743d1951d72594d609e6e1a5c99"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-cc5a1743d1951d72594d609e6e1a5c99">¶</a></span><p>Changed·the·implementation·of·fetching·CLOB·and·BLOB·objects·to·use |
1817 | cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline | 1811 | cx_Oracle’s·native·implementation·which·fetches·CLOB/BLOB·objects·inline |
1818 | with·other·result·columns,·rather·than·performing·a·separate·fetch.·As | 1812 | with·other·result·columns,·rather·than·performing·a·separate·fetch.·As |
1819 | always,·this·can·be·disabled·by·setting·auto_convert_lobs·to·False.</p> | 1813 | always,·this·can·be·disabled·by·setting·auto_convert_lobs·to·False.</p> |
1820 | <p>As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank | 1814 | <p>As·part·of·this·change,·the·behavior·of·a·CLOB·that·was·given·a·blank |
1821 | string·on·INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with | 1815 | string·on·INSERT·now·returns·None·on·SELECT,·which·is·now·consistent·with |
1822 | that·of·VARCHAR·on·Oracle.</p> | 1816 | that·of·VARCHAR·on·Oracle.</p> |
1823 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5314">#5314</a></p> | 1817 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/5314">#5314</a></p> |
1824 | </p> | 1818 | </p> |
1825 | </li> | 1819 | </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>[ | 2211 | <li><p·class="caption"·id="change-1.3.14-13"><span·class="target"·id="change-4aee123e6060a97e0c5cd34e2d4f5ffa"><strong>[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4aee123e6060a97e0c5cd34e2d4f5ffa">¶</a></span><p>Revised·an·internal·change·to·the·test·system·added·as·a·result·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 | ||
1151 | 1160 | [\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | |
1152 | 1161 | Some·modifications·to·how·the·cx_oracle·dialect·sets·up·per-column·outputtype | |
1153 | 1162 | handlers·for·LOB·and·numeric·datatypes·to·adjust·for·potential·changes·coming | |
1154 | 1163 | in·cx_Oracle·8. | |
1155 | 1164 | 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[ | 1416 | [\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\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 3065, 36 lines modified | Offset 3065, 36 lines modified | ||
3065 | 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>, | 3065 | 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>, |
3066 | <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 | 3066 | <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 |
3067 | <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 | 3067 | <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 |
3068 | Core-only·selectables.</p> | 3068 | Core-only·selectables.</p> |
3069 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7861">#7861</a></p> | 3069 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7861">#7861</a></p> |
3070 | </p> | 3070 | </p> |
3071 | </li> | 3071 | </li> |
3072 | <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 | ||
3073 | intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an | ||
3074 | expression·object·is·created.·These·clones·have·been·greatly·reduced, | ||
3075 | reducing·the·number·of·total·expression·objects·stored·in·memory·by | ||
3076 | ORM·mappings·by·about·30%.</p> | ||
3077 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7823">#7823</a></p> | ||
3078 | </p> | ||
3079 | </li> | ||
3072 | <li><p·class="caption"·id="change-1.4.33- | 3080 | <li><p·class="caption"·id="change-1.4.33-3"><span·class="target"·id="change-6e997a9f24c37627b3bc1af26a5a2c9d"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-6e997a9f24c37627b3bc1af26a5a2c9d">¶</a></span><p>Fixed·regression·in·“dynamic”·loader·strategy·where·the |
3073 | <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 | 3081 | <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 |
3074 | entity·to·filter·from,·in·the·case·where·a·“secondary”·table·were·present | 3082 | entity·to·filter·from,·in·the·case·where·a·“secondary”·table·were·present |
3075 | in·the·relationship·being·queried·and·the·mapping·were·against·something | 3083 | in·the·relationship·being·queried·and·the·mapping·were·against·something |
3076 | complex·such·as·a·“with·polymorphic”.</p> | 3084 | complex·such·as·a·“with·polymorphic”.</p> |
3077 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7868">#7868</a></p> | 3085 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7868">#7868</a></p> |
3078 | </p> | 3086 | </p> |
3079 | </li> | 3087 | </li> |
3080 | <li><p·class="caption"·id="change-1.4.33- | 3088 | <li><p·class="caption"·id="change-1.4.33-4"><span·class="target"·id="change-4964a00cd636f3fbb10595151e1fb258"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-4964a00cd636f3fbb10595151e1fb258">¶</a></span><p>Fixed·bug·where·<a·class="reference·internal"·href="../orm/composites.html#sqlalchemy.orm.composite"·title="sqlalchemy.orm.composite"><code·class="xref·py·py-func·docutils·literal·notranslate"><span·class="pre">composite()</span></code></a>·attributes·would·not·work·in |
3081 | 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 | 3089 | 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 |
3082 | joined·table·inheritance.</p> | 3090 | joined·table·inheritance.</p> |
3083 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7801">#7801</a></p> | 3091 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7801">#7801</a></p> |
3084 | </p> | 3092 | </p> |
3085 | </li> | 3093 | </li> |
3086 | <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 | ||
3087 | intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an | ||
3088 | expression·object·is·created.·These·clones·have·been·greatly·reduced, | ||
3089 | reducing·the·number·of·total·expression·objects·stored·in·memory·by | ||
3090 | ORM·mappings·by·about·30%.</p> | ||
3091 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7823">#7823</a></p> | ||
3092 | </p> | ||
3093 | </li> | ||
3094 | <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 | 3094 | <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 |
3095 | not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed | 3095 | not·work·with·joined·inheritance·mappers·that·don’t·have·a·fixed |
3096 | “polymorphic_on”·column.···Additionally·added·test·support·for·a·wider | 3096 | “polymorphic_on”·column.···Additionally·added·test·support·for·a·wider |
3097 | variety·of·usage·patterns·with·this·construct.</p> | 3097 | variety·of·usage·patterns·with·this·construct.</p> |
3098 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7799">#7799</a></p> | 3098 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7799">#7799</a></p> |
3099 | </p> | 3099 | </p> |
3100 | </li> | 3100 | </li> |
Offset 4821, 15 lines modified | Offset 4821, 15 lines modified | ||
4821 | </p> | 4821 | </p> |
4822 | </li> | 4822 | </li> |
4823 | </ul> | 4823 | </ul> |
4824 | </section> | 4824 | </section> |
4825 | <section·id="change-1.4.24-oracle"> | 4825 | <section·id="change-1.4.24-oracle"> |
4826 | <h3>oracle<a·class="headerlink"·href="#change-1.4.24-oracle"·title="Link·to·this·heading">¶</a></h3> | 4826 | <h3>oracle<a·class="headerlink"·href="#change-1.4.24-oracle"·title="Link·to·this·heading">¶</a></h3> |
4827 | <ul·class="simple"> | 4827 | <ul·class="simple"> |
4828 | <li><p·class="caption"·id="change-1.4.24-26"><span·class="target"·id="change-52e239f85c12b1dda3a1f0ff8b1b7760"><strong>[oracle]·[ | 4828 | <li><p·class="caption"·id="change-1.4.24-26"><span·class="target"·id="change-52e239f85c12b1dda3a1f0ff8b1b7760"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-52e239f85c12b1dda3a1f0ff8b1b7760">¶</a></span><p>Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other |
4829 | DDL-name·parameters·as·used·in·reflection·queries·against·Oracle·system | 4829 | DDL-name·parameters·as·used·in·reflection·queries·against·Oracle·system |
4830 | views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable | 4830 | views·such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable |
4831 | indexing·to·take·place·against·these·columns,·as·they·previously·would·be | 4831 | indexing·to·take·place·against·these·columns,·as·they·previously·would·be |
4832 | implicitly·handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings; | 4832 | implicitly·handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings; |
4833 | these·columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with | 4833 | these·columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with |
4834 | lengths·varying·from·30·to·128·characters·depending·on·server·version. | 4834 | lengths·varying·from·30·to·128·characters·depending·on·server·version. |
4835 | Additionally,·test·support·has·been·enabled·for·Unicode-named·DDL | 4835 | Additionally,·test·support·has·been·enabled·for·Unicode-named·DDL |
Offset 5544, 15 lines modified | Offset 5544, 24 lines modified | ||
5544 | </section> | 5544 | </section> |
5545 | </section> | 5545 | </section> |
5546 | <section·id="change-1.4.18"> | 5546 | <section·id="change-1.4.18"> |
5547 | <h2·class="release-version">1.4.18<a·class="headerlink"·href="#change-1.4.18"·title="Link·to·this·heading">¶</a></h2> | 5547 | <h2·class="release-version">1.4.18<a·class="headerlink"·href="#change-1.4.18"·title="Link·to·this·heading">¶</a></h2> |
5548 | Released:·June·10,·2021<section·id="change-1.4.18-orm"> | 5548 | Released:·June·10,·2021<section·id="change-1.4.18-orm"> |
5549 | <h3>orm<a·class="headerlink"·href="#change-1.4.18-orm"·title="Link·to·this·heading">¶</a></h3> | 5549 | <h3>orm<a·class="headerlink"·href="#change-1.4.18-orm"·title="Link·to·this·heading">¶</a></h3> |
5550 | <ul·class="simple"> | 5550 | <ul·class="simple"> |
5551 | <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 | ||
5552 | to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly | ||
5553 | more·expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to | ||
5554 | some·logic·that·was·removed·since·1.3.·The·issue·could·also·cause | ||
5555 | deprecation·warnings·involving·column·resolution·to·be·emitted·when·using·a | ||
5556 | 1.4·style·query·with·joined·eager·loading.</p> | ||
5557 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6596">#6596</a></p> | ||
5558 | </p> | ||
5559 | </li> | ||
5551 | <li><p·class="caption"·id="change-1.4.18- | 5560 | <li><p·class="caption"·id="change-1.4.18-1"><span·class="target"·id="change-bbc62687df1511016980bc3701009b8b"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-bbc62687df1511016980bc3701009b8b">¶</a></span><p>Clarified·the·current·purpose·of·the |
5552 | <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 | 5561 | <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 |
5553 | or·disable·“lambda·caching”·of·statements·within·the·“lazyload”·and | 5562 | or·disable·“lambda·caching”·of·statements·within·the·“lazyload”·and |
5554 | “selectinload”·loader·strategies;·this·is·separate·from·the·more | 5563 | “selectinload”·loader·strategies;·this·is·separate·from·the·more |
5555 | foundational·SQL·query·cache·that·is·used·for·most·statements. | 5564 | foundational·SQL·query·cache·that·is·used·for·most·statements. |
5556 | Additionally,·the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one | 5565 | Additionally,·the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one |
5557 | SQL·queries,·which·was·an·implementation·quirk·that·doesn’t·exist·for·any | 5566 | SQL·queries,·which·was·an·implementation·quirk·that·doesn’t·exist·for·any |
5558 | other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader | 5567 | other·loader·scenario.·Finally,·the·“lru·cache”·warning·that·the·lazyloader |
Offset 5562, 38 lines modified | Offset 5571, 29 lines modified | ||
5562 | setting·<code·class="docutils·literal·notranslate"><span·class="pre">bake_queries=False</span></code>·for·such·a·relationship·will·remove·this | 5571 | setting·<code·class="docutils·literal·notranslate"><span·class="pre">bake_queries=False</span></code>·for·such·a·relationship·will·remove·this |
5563 | cache·from·being·used,·there’s·no·particular·performance·gain·in·this·case | 5572 | cache·from·being·used,·there’s·no·particular·performance·gain·in·this·case |
5564 | as·using·no·caching·vs.·using·a·cache·that·needs·to·refresh·often·likely | 5573 | as·using·no·caching·vs.·using·a·cache·that·needs·to·refresh·often·likely |
5565 | still·wins·out·on·the·caching·being·used·side.</p> | 5574 | still·wins·out·on·the·caching·being·used·side.</p> |
5566 | <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> | 5575 | <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> |
5567 | </p> | 5576 | </p> |
5568 | </li> | 5577 | </li> |
5569 | <li><p·class="caption"·id="change-1.4.18- | 5578 | <li><p·class="caption"·id="change-1.4.18-2"><span·class="target"·id="change-d2695c12943f278ad9d30faa9fb3f801"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-d2695c12943f278ad9d30faa9fb3f801">¶</a></span><p>Adjusted·the·means·by·which·classes·such·as·<a·class="reference·internal"·href="../orm/contextual.html#sqlalchemy.orm.scoped_session"·title="sqlalchemy.orm.scoped_session"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">scoped_session</span></code></a> |
5570 | 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 | 5579 | 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 |
5571 | <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> | 5580 | <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> |
5572 | subclasses·such·as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement | 5581 | subclasses·such·as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement |
5573 | positional·arguments·when·they·call·into·the·superclass·method,·and·can | 5582 | positional·arguments·when·they·call·into·the·superclass·method,·and·can |
5574 | continue·using·the·same·argument·styles·as·in·previous·releases.</p> | 5583 | continue·using·the·same·argument·styles·as·in·previous·releases.</p> |
5575 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6285">#6285</a></p> | 5584 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6285">#6285</a></p> |
5576 | </p> | 5585 | </p> |
5577 | </li> | 5586 | </li> |
5578 | <li><p·class="caption"·id="change-1.4.18- | 5587 | <li><p·class="caption"·id="change-1.4.18-3"><span·class="target"·id="change-f63c401b2709ae6721b787d7eda1a013"><strong>[orm]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-f63c401b2709ae6721b787d7eda1a013">¶</a></span><p>Fixed·issue·where·query·production·for·joinedload·against·a·complex·left |
5579 | hand·side·involving·joined-table·inheritance·could·fail·to·produce·a | 5588 | hand·side·involving·joined-table·inheritance·could·fail·to·produce·a |
5580 | correct·query,·due·to·a·clause·adaption·issue.</p> | 5589 | correct·query,·due·to·a·clause·adaption·issue.</p> |
5581 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6595">#6595</a></p> | 5590 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6595">#6595</a></p> |
5582 | </p> | 5591 | </p> |
5583 | </li> | 5592 | </li> |
5584 | <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 | ||
5585 | to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly | ||
5586 | more·expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to | ||
5587 | some·logic·that·was·removed·since·1.3.·The·issue·could·also·cause | ||
5588 | deprecation·warnings·involving·column·resolution·to·be·emitted·when·using·a | ||
5589 | 1.4·style·query·with·joined·eager·loading.</p> | ||
5590 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6596">#6596</a></p> | ||
5591 | </p> | ||
5592 | </li> | ||
5593 | <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 | 5593 | <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 |
5594 | case·where·an·error·was·raised·if·the·statement·were·against·a | 5594 | case·where·an·error·was·raised·if·the·statement·were·against·a |
5595 | single-table-inheritance·subclass.</p> | 5595 | single-table-inheritance·subclass.</p> |
5596 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6591">#6591</a></p> | 5596 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6591">#6591</a></p> |
5597 | </p> | 5597 | </p> |
5598 | </li> | 5598 | </li> |
5599 | <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 | 5599 | <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 6437, 15 lines modified | Offset 6437, 15 lines modified | ||
6437 | synonyms·can·be·established·linking·to·these·constructs·which·work | 6437 | synonyms·can·be·established·linking·to·these·constructs·which·work |
6438 | fully.···This·is·a·behavior·that·was·semi-explicitly·disallowed·previously, | 6438 | fully.···This·is·a·behavior·that·was·semi-explicitly·disallowed·previously, |
Max diff block lines reached; 1801/18126 bytes (9.94%) of diff not shown. |
Offset 2032, 31 lines modified | Offset 2032, 31 lines modified | ||
2032 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 2032 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ |
2033 | 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 | 2033 | 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 |
2034 | _\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 | 2034 | _\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 |
2035 | 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. | 2035 | 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. |
2036 | 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 | 2036 | 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 |
2037 | selectables. | 2037 | selectables. |
2038 | References:·_\x8#_\x87_\x88_\x86_\x81 | 2038 | References:·_\x8#_\x87_\x88_\x86_\x81 |
2039 | [\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¶ | ||
2040 | Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of | ||
2041 | intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an | ||
2042 | expression·object·is·created.·These·clones·have·been·greatly·reduced,·reducing | ||
2043 | the·number·of·total·expression·objects·stored·in·memory·by·ORM·mappings·by | ||
2044 | about·30%. | ||
2045 | References:·_\x8#_\x87_\x88_\x82_\x83 | ||
2039 | [\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¶ | 2046 | [\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¶ |
2040 | 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) | 2047 | 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) |
2041 | method·would·not·be·given·an·appropriate·entity·to·filter·from,·in·the·case | 2048 | method·would·not·be·given·an·appropriate·entity·to·filter·from,·in·the·case |
2042 | where·a·“secondary”·table·were·present·in·the·relationship·being·queried·and | 2049 | where·a·“secondary”·table·were·present·in·the·relationship·being·queried·and |
2043 | the·mapping·were·against·something·complex·such·as·a·“with·polymorphic”. | 2050 | the·mapping·were·against·something·complex·such·as·a·“with·polymorphic”. |
2044 | References:·_\x8#_\x87_\x88_\x86_\x88 | 2051 | References:·_\x8#_\x87_\x88_\x86_\x88 |
2045 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 2052 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
2046 | Fixed·bug·where·_\x8c_\x8o_\x8m_\x8p_\x8o_\x8s_\x8i_\x8t_\x8e_\x8(_\x8)·attributes·would·not·work·in·conjunction·with·the | 2053 | Fixed·bug·where·_\x8c_\x8o_\x8m_\x8p_\x8o_\x8s_\x8i_\x8t_\x8e_\x8(_\x8)·attributes·would·not·work·in·conjunction·with·the |
2047 | _\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. | 2054 | _\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. |
2048 | References:·_\x8#_\x87_\x88_\x80_\x81 | 2055 | References:·_\x8#_\x87_\x88_\x80_\x81 |
2049 | [\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¶ | ||
2050 | Improvements·in·memory·usage·by·the·ORM,·removing·a·significant·set·of | ||
2051 | intermediary·expression·objects·that·are·typically·stored·when·a·copy·of·an | ||
2052 | expression·object·is·created.·These·clones·have·been·greatly·reduced,·reducing | ||
2053 | the·number·of·total·expression·objects·stored·in·memory·by·ORM·mappings·by | ||
2054 | about·30%. | ||
2055 | References:·_\x8#_\x87_\x88_\x82_\x83 | ||
2056 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 2056 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
2057 | 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 | 2057 | 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 |
2058 | joined·inheritance·mappers·that·don’t·have·a·fixed·“polymorphic_on”·column. | 2058 | joined·inheritance·mappers·that·don’t·have·a·fixed·“polymorphic_on”·column. |
2059 | Additionally·added·test·support·for·a·wider·variety·of·usage·patterns·with·this | 2059 | Additionally·added·test·support·for·a·wider·variety·of·usage·patterns·with·this |
2060 | construct. | 2060 | construct. |
2061 | References:·_\x8#_\x87_\x87_\x89_\x89 | 2061 | References:·_\x8#_\x87_\x87_\x89_\x89 |
2062 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 2062 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
Offset 3255, 15 lines modified | Offset 3255, 15 lines modified | ||
3255 | ····*·[\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¶ | 3255 | ····*·[\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¶ |
3256 | ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned | 3256 | ······Fixed·an·issue·where·sqlalchemy.engine.reflection.has_table()·returned |
3257 | ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL | 3257 | ······True·for·local·temporary·tables·that·actually·belonged·to·a·different·SQL |
3258 | ······Server·session·(connection).·An·extra·check·is·now·performed·to·ensure | 3258 | ······Server·session·(connection).·An·extra·check·is·now·performed·to·ensure |
3259 | ······that·the·temp·table·detected·is·in·fact·owned·by·the·current·session. | 3259 | ······that·the·temp·table·detected·is·in·fact·owned·by·the·current·session. |
3260 | ······References:·_\x8#_\x86_\x89_\x81_\x80 | 3260 | ······References:·_\x8#_\x86_\x89_\x81_\x80 |
3261 | *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 3261 | *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
3262 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[ | 3262 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·_\x8¶ |
3263 | ······Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other·DDL- | 3263 | ······Added·a·CAST(VARCHAR2(128))·to·the·“table·name”,·“owner”,·and·other·DDL- |
3264 | ······name·parameters·as·used·in·reflection·queries·against·Oracle·system·views | 3264 | ······name·parameters·as·used·in·reflection·queries·against·Oracle·system·views |
3265 | ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to | 3265 | ······such·as·ALL_TABLES,·ALL_TAB_CONSTRAINTS,·etc·to·better·enable·indexing·to |
3266 | ······take·place·against·these·columns,·as·they·previously·would·be·implicitly | 3266 | ······take·place·against·these·columns,·as·they·previously·would·be·implicitly |
3267 | ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these | 3267 | ······handled·as·NVARCHAR2·due·to·Python’s·use·of·Unicode·for·strings;·these |
3268 | ······columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with | 3268 | ······columns·are·documented·in·all·Oracle·versions·as·being·VARCHAR2·with |
3269 | ······lengths·varying·from·30·to·128·characters·depending·on·server·version. | 3269 | ······lengths·varying·from·30·to·128·characters·depending·on·server·version. |
Offset 3763, 51 lines modified | Offset 3763, 50 lines modified | ||
3763 | the·INSERT·thus·triggering·SQLAlchemy’s·feature·of·setting·IDENTITY·INSERT·to | 3763 | the·INSERT·thus·triggering·SQLAlchemy’s·feature·of·setting·IDENTITY·INSERT·to |
3764 | “on”;·it’s·in·this·directive·where·the·schema·translate·map·would·fail·to·be | 3764 | “on”;·it’s·in·this·directive·where·the·schema·translate·map·would·fail·to·be |
3765 | honored. | 3765 | honored. |
3766 | References:·_\x8#_\x86_\x86_\x85_\x88 | 3766 | References:·_\x8#_\x86_\x86_\x85_\x88 |
3767 | *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.4\x84.\x8.1\x818\x88_\x8?\x8¶·*\x8**\x8**\x8**\x8**\x8* | 3767 | *\x8**\x8**\x8**\x8**\x8*·1\x81.\x8.4\x84.\x8.1\x818\x88_\x8?\x8¶·*\x8**\x8**\x8**\x8**\x8* |
3768 | Released:·June·10,·2021 | 3768 | Released:·June·10,·2021 |
3769 | *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 3769 | *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
3770 | ····*·[\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¶ | ||
3771 | ······Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped | ||
3772 | ······column·to·a·result·row,·where·under·cases·such·as·joined·eager·loading,·a | ||
3773 | ······slightly·more·expensive·“fallback”·could·take·place·to·set·up·this | ||
3774 | ······resolution·due·to·some·logic·that·was·removed·since·1.3.·The·issue·could | ||
3775 | ······also·cause·deprecation·warnings·involving·column·resolution·to·be·emitted | ||
3776 | ······when·using·a·1.4·style·query·with·joined·eager·loading. | ||
3777 | ······References:·_\x8#_\x86_\x85_\x89_\x86 | ||
3770 | 3778 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | |
3771 | 3779 | Clarified·the·current·purpose·of·the·_.r_.e_.l_.a_.t_.i_.o_.n_.s_.h_.i_.p_.._.b_.a_.k_.e_.__.q_.u_.e_.r_.i_.e_.s·flag,·which·in | |
3772 | 3780 | 1.4·is·to·enable·or·disable·“lambda·caching”·of·statements·within·the | |
3781 | “lazyload”·and·“selectinload”·loader·strategies;·this·is·separate·from·the·more | ||
3782 | foundational·SQL·query·cache·that·is·used·for·most·statements.·Additionally, | ||
3783 | the·lazy·loader·no·longer·uses·its·own·cache·for·many-to-one·SQL·queries,·which | ||
3784 | was·an·implementation·quirk·that·doesn’t·exist·for·any·other·loader·scenario. | ||
3785 | Finally,·the·“lru·cache”·warning·that·the·lazyloader·and·selectinloader | ||
3786 | strategies·could·emit·when·handling·a·wide·array·of·class/relationship | ||
3773 | ······within·the·“lazyload”·and·“selectinload”·loader·strategies;·this·is | ||
3774 | ······separate·from·the·more·foundational·SQL·query·cache·that·is·used·for·most | ||
3775 | ······statements.·Additionally,·the·lazy·loader·no·longer·uses·its·own·cache | ||
3776 | ······for·many-to-one·SQL·queries,·which·was·an·implementation·quirk·that | ||
3777 | ······doesn’t·exist·for·any·other·loader·scenario.·Finally,·the·“lru·cache” | ||
3778 | ······warning·that·the·lazyloader·and·selectinloader·strategies·could·emit·when | ||
3779 | ······handling·a·wide·array·of·class/relationship·combinations·has·been | ||
3780 | ·· | 3787 | combinations·has·been·removed;·based·on·analysis·of·some·end-user·cases,·this |
3781 | · | 3788 | warning·doesn’t·suggest·any·significant·issue.·While·setting·bake_queries=False |
3782 | · | 3789 | for·such·a·relationship·will·remove·this·cache·from·being·used,·there’s·no |
3783 | 3790 | particular·performance·gain·in·this·case·as·using·no·caching·vs.·using·a·cache | |
3784 | 3791 | that·needs·to·refresh·often·likely·still·wins·out·on·the·caching·being·used | |
3785 | 3792 | side. | |
3786 | 3793 | References:·_\x8#_\x86_\x80_\x87_\x82,·_\x8#_\x86_\x84_\x88_\x87 | |
3787 | [\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¶ | 3794 | [\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¶ |
3788 | 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 | 3795 | 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 |
3789 | generated·from·the·base·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·class,·such·that·custom·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·subclasses·such | 3796 | generated·from·the·base·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·class,·such·that·custom·_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n·subclasses·such |
3790 | as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement·positional·arguments | 3797 | as·that·used·by·Flask-SQLAlchemy·don’t·need·to·implement·positional·arguments |
3791 | when·they·call·into·the·superclass·method,·and·can·continue·using·the·same | 3798 | when·they·call·into·the·superclass·method,·and·can·continue·using·the·same |
3792 | argument·styles·as·in·previous·releases. | 3799 | argument·styles·as·in·previous·releases. |
3793 | References:·_\x8#_\x86_\x82_\x88_\x85 | 3800 | References:·_\x8#_\x86_\x82_\x88_\x85 |
3794 | [\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¶ | 3801 | [\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¶ |
3795 | Fixed·issue·where·query·production·for·joinedload·against·a·complex·left·hand | 3802 | Fixed·issue·where·query·production·for·joinedload·against·a·complex·left·hand |
3796 | side·involving·joined-table·inheritance·could·fail·to·produce·a·correct·query, | 3803 | side·involving·joined-table·inheritance·could·fail·to·produce·a·correct·query, |
3797 | due·to·a·clause·adaption·issue. | 3804 | due·to·a·clause·adaption·issue. |
3798 | References:·_\x8#_\x86_\x85_\x89_\x85 | 3805 | References:·_\x8#_\x86_\x85_\x89_\x85 |
3799 | [\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¶ | ||
3800 | Fixed·regression·involving·how·the·ORM·would·resolve·a·given·mapped·column·to·a | ||
3801 | result·row,·where·under·cases·such·as·joined·eager·loading,·a·slightly·more | ||
3802 | expensive·“fallback”·could·take·place·to·set·up·this·resolution·due·to·some | ||
3803 | logic·that·was·removed·since·1.3.·The·issue·could·also·cause·deprecation | ||
3804 | warnings·involving·column·resolution·to·be·emitted·when·using·a·1.4·style·query | ||
3805 | with·joined·eager·loading. | ||
3806 | References:·_\x8#_\x86_\x85_\x89_\x86 | ||
3807 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 3806 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
3808 | Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use·case | 3807 | Fixed·issue·in·experimental·“select·ORM·objects·from·INSERT/UPDATE”·use·case |
3809 | where·an·error·was·raised·if·the·statement·were·against·a·single-table- | 3808 | where·an·error·was·raised·if·the·statement·were·against·a·single-table- |
3810 | inheritance·subclass. | 3809 | inheritance·subclass. |
3811 | References:·_\x8#_\x86_\x85_\x89_\x81 | 3810 | References:·_\x8#_\x86_\x85_\x89_\x81 |
3812 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 3811 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
3813 | The·warning·that’s·emitted·for·_\x8r_\x8e_\x8l_\x8a_\x8t_\x8i_\x8o_\x8n_\x8s_\x8h_\x8i_\x8p_\x8(_\x8)·when·multiple·relationships·would | 3812 | 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 4377, 15 lines modified | Offset 4376, 15 lines modified | ||
4377 | ······Established·support·for·synoynm()·in·conjunction·with·hybrid·property, | 4376 | ······Established·support·for·synoynm()·in·conjunction·with·hybrid·property, |
4378 | ······assocaitionproxy·is·set·up·completely,·including·that·synonyms·can·be | 4377 | ······assocaitionproxy·is·set·up·completely,·including·that·synonyms·can·be |
4379 | ······established·linking·to·these·constructs·which·work·fully.·This·is·a | 4378 | ······established·linking·to·these·constructs·which·work·fully.·This·is·a |
4380 | ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it | 4379 | ······behavior·that·was·semi-explicitly·disallowed·previously,·however·since·it |
4381 | ······did·not·fail·in·every·scenario,·explicit·support·for·assoc·proxy·and | 4380 | ······did·not·fail·in·every·scenario,·explicit·support·for·assoc·proxy·and |
4382 | ······hybrids·has·been·added. | 4381 | ······hybrids·has·been·added. |
Max diff block lines reached; 831/10300 bytes (8.07%) of diff not shown. |
Offset 1573, 32 lines modified | Offset 1573, 32 lines modified | ||
1573 | </section> | 1573 | </section> |
1574 | </section> | 1574 | </section> |
1575 | <section·id="change-2.0.28"> | 1575 | <section·id="change-2.0.28"> |
1576 | <h2·class="release-version">2.0.28<a·class="headerlink"·href="#change-2.0.28"·title="Link·to·this·heading">¶</a></h2> | 1576 | <h2·class="release-version">2.0.28<a·class="headerlink"·href="#change-2.0.28"·title="Link·to·this·heading">¶</a></h2> |
1577 | Released:·March·4,·2024<section·id="change-2.0.28-orm"> | 1577 | Released:·March·4,·2024<section·id="change-2.0.28-orm"> |
1578 | <h3>orm<a·class="headerlink"·href="#change-2.0.28-orm"·title="Link·to·this·heading">¶</a></h3> | 1578 | <h3>orm<a·class="headerlink"·href="#change-2.0.28-orm"·title="Link·to·this·heading">¶</a></h3> |
1579 | <ul·class="simple"> | 1579 | <ul·class="simple"> |
1580 | <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 | ||
1581 | in·a·relationship·<code·class="docutils·literal·notranslate"><span·class="pre">and_()</span></code>·expression·would·fail·to·be·aliased·to·match | ||
1582 | how·the·“secondary”·table·normally·renders·within·a | ||
1583 | <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> | ||
1584 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11010">#11010</a></p> | ||
1585 | </p> | ||
1586 | </li> | ||
1587 | <li><p·class="caption"·id="change-2.0.28- | 1580 | <li><p·class="caption"·id="change-2.0.28-0"><span·class="target"·id="change-ac3f7e555f345c82b2b07b34069c7489"><strong>[orm]·[performance]·[bug]·[regression]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ac3f7e555f345c82b2b07b34069c7489">¶</a></span><p>Adjusted·the·fix·made·in·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10570">#10570</a>,·released·in·2.0.23,·where·new |
1588 | logic·was·added·to·reconcile·possibly·changing·bound·parameter·values | 1581 | logic·was·added·to·reconcile·possibly·changing·bound·parameter·values |
1589 | 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> | 1582 | 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> |
1590 | construct.··The·new·logic·changes·the·approach·by·which·the·new·bound | 1583 | construct.··The·new·logic·changes·the·approach·by·which·the·new·bound |
1591 | parameter·values·are·associated·with·the·statement,·avoiding·the·need·to | 1584 | parameter·values·are·associated·with·the·statement,·avoiding·the·need·to |
1592 | deep-copy·the·statement·which·can·result·in·a·significant·performance | 1585 | deep-copy·the·statement·which·can·result·in·a·significant·performance |
1593 | penalty·for·very·deep·/·complex·SQL·constructs.··The·new·approach·no·longer | 1586 | penalty·for·very·deep·/·complex·SQL·constructs.··The·new·approach·no·longer |
1594 | requires·this·deep-copy·step.</p> | 1587 | requires·this·deep-copy·step.</p> |
1595 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11085">#11085</a></p> | 1588 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11085">#11085</a></p> |
1596 | </p> | 1589 | </p> |
1597 | </li> | 1590 | </li> |
1591 | <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 | ||
1592 | in·a·relationship·<code·class="docutils·literal·notranslate"><span·class="pre">and_()</span></code>·expression·would·fail·to·be·aliased·to·match | ||
1593 | how·the·“secondary”·table·normally·renders·within·a | ||
1594 | <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> | ||
1595 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/11010">#11010</a></p> | ||
1596 | </p> | ||
1597 | </li> | ||
1598 | </ul> | 1598 | </ul> |
1599 | </section> | 1599 | </section> |
1600 | <section·id="change-2.0.28-engine"> | 1600 | <section·id="change-2.0.28-engine"> |
1601 | <h3>engine<a·class="headerlink"·href="#change-2.0.28-engine"·title="Link·to·this·heading">¶</a></h3> | 1601 | <h3>engine<a·class="headerlink"·href="#change-2.0.28-engine"·title="Link·to·this·heading">¶</a></h3> |
1602 | <ul·class="simple"> | 1602 | <ul·class="simple"> |
1603 | <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 | 1603 | <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 |
1604 | <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 | 1604 | <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 1831, 15 lines modified | Offset 1831, 15 lines modified | ||
1831 | </p> | 1831 | </p> |
1832 | </li> | 1832 | </li> |
1833 | </ul> | 1833 | </ul> |
1834 | </section> | 1834 | </section> |
1835 | <section·id="change-2.0.26-oracle"> | 1835 | <section·id="change-2.0.26-oracle"> |
1836 | <h3>oracle<a·class="headerlink"·href="#change-2.0.26-oracle"·title="Link·to·this·heading">¶</a></h3> | 1836 | <h3>oracle<a·class="headerlink"·href="#change-2.0.26-oracle"·title="Link·to·this·heading">¶</a></h3> |
1837 | <ul·class="simple"> | 1837 | <ul·class="simple"> |
1838 | <li><p·class="caption"·id="change-2.0.26-17"><span·class="target"·id="change-2f52e064b693a9bdcdced00a0086ec1c"><strong>[oracle]·[ | 1838 | <li><p·class="caption"·id="change-2.0.26-17"><span·class="target"·id="change-2f52e064b693a9bdcdced00a0086ec1c"><strong>[oracle]·[performance]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-2f52e064b693a9bdcdced00a0086ec1c">¶</a></span><p>Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value·set |
1839 | by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both | 1839 | by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both |
1840 | cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.·The | 1840 | cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default.·The |
1841 | setting·of·50·could·cause·significant·performance·regressions·compared·to | 1841 | setting·of·50·could·cause·significant·performance·regressions·compared·to |
1842 | when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of·rows·over | 1842 | when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of·rows·over |
1843 | slower·networks.</p> | 1843 | slower·networks.</p> |
1844 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10877">#10877</a></p> | 1844 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/10877">#10877</a></p> |
1845 | </p> | 1845 | </p> |
Offset 6073, 39 lines modified | Offset 6073, 39 lines modified | ||
6073 | <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 | 6073 | <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 |
6074 | <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 | 6074 | <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 |
6075 | <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 | 6075 | <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 |
6076 | Simon·Schiele.</p> | 6076 | Simon·Schiele.</p> |
6077 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8905">#8905</a></p> | 6077 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8905">#8905</a></p> |
6078 | </p> | 6078 | </p> |
6079 | </li> | 6079 | </li> |
6080 | <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, | ||
6081 | specifically·targeting·callcounts·within·the·construction·of·ORM | ||
6082 | 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 | ||
6083 | <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 | ||
6084 | performance·improvements·to·the·<code·class="docutils·literal·notranslate"><span·class="pre">corresponding_column()</span></code>·internal·method | ||
6085 | 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 | ||
6086 | similar.</p> | ||
6087 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8796">#8796</a></p> | ||
6088 | </p> | ||
6089 | </li> | ||
6080 | <li><p·class="caption"·id="change-2.0.0b4- | 6090 | <li><p·class="caption"·id="change-2.0.0b4-4"><span·class="target"·id="change-36bb3ef310ce109a6974abb1f01249b5"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-36bb3ef310ce109a6974abb1f01249b5">¶</a></span><p>Fixed·issue·where·use·of·an·unknown·datatype·within·a·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a> |
6081 | annotation·for·a·column-based·attribute·would·silently·fail·to·map·the | 6091 | annotation·for·a·column-based·attribute·would·silently·fail·to·map·the |
6082 | attribute,·rather·than·reporting·an·exception;·an·informative·exception | 6092 | attribute,·rather·than·reporting·an·exception;·an·informative·exception |
6083 | message·is·now·raised.</p> | 6093 | message·is·now·raised.</p> |
6084 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8888">#8888</a></p> | 6094 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8888">#8888</a></p> |
6085 | </p> | 6095 | </p> |
6086 | </li> | 6096 | </li> |
6087 | <li><p·class="caption"·id="change-2.0.0b4- | 6097 | <li><p·class="caption"·id="change-2.0.0b4-5"><span·class="target"·id="change-8f97eef21ad80d54b13f789e3be204fc"><strong>[orm]·[bug]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-8f97eef21ad80d54b13f789e3be204fc">¶</a></span><p>Fixed·a·suite·of·issues·involving·<a·class="reference·internal"·href="../orm/internals.html#sqlalchemy.orm.Mapped"·title="sqlalchemy.orm.Mapped"><code·class="xref·py·py-class·docutils·literal·notranslate"><span·class="pre">Mapped</span></code></a>·use·with·dictionary |
6088 | 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 | 6098 | 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 |
6089 | interpreted·in·Declarative·ORM·mappings.·Support·to·correctly | 6099 | interpreted·in·Declarative·ORM·mappings.·Support·to·correctly |
6090 | “de-optionalize”·this·type·including·for·lookup·in·<code·class="docutils·literal·notranslate"><span·class="pre">type_annotation_map</span></code> | 6100 | “de-optionalize”·this·type·including·for·lookup·in·<code·class="docutils·literal·notranslate"><span·class="pre">type_annotation_map</span></code> |
6091 | has·been·fixed.</p> | 6101 | has·been·fixed.</p> |
6092 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8777">#8777</a></p> | 6102 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8777">#8777</a></p> |
6093 | </p> | 6103 | </p> |
6094 | </li> | 6104 | </li> |
6095 | <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, | ||
6096 | specifically·targeting·callcounts·within·the·construction·of·ORM | ||
6097 | 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 | ||
6098 | <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 | ||
6099 | performance·improvements·to·the·<code·class="docutils·literal·notranslate"><span·class="pre">corresponding_column()</span></code>·internal·method | ||
6100 | 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 | ||
6101 | similar.</p> | ||
6102 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8796">#8796</a></p> | ||
6103 | </p> | ||
6104 | </li> | ||
6105 | <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 | 6105 | <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 |
6106 | plain·dataclass·fields·with·the·<code·class="docutils·literal·notranslate"><span·class="pre">__allow_unmapped__</span></code>·directive·in·a | 6106 | plain·dataclass·fields·with·the·<code·class="docutils·literal·notranslate"><span·class="pre">__allow_unmapped__</span></code>·directive·in·a |
6107 | mapping·would·not·create·a·dataclass·with·the·correct·class-level·state·for | 6107 | mapping·would·not·create·a·dataclass·with·the·correct·class-level·state·for |
6108 | those·fields,·copying·the·raw·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·to·the·class·inappropriately | 6108 | those·fields,·copying·the·raw·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·to·the·class·inappropriately |
6109 | after·dataclasses·itself·had·replaced·the·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·with·the | 6109 | after·dataclasses·itself·had·replaced·the·<code·class="docutils·literal·notranslate"><span·class="pre">Field</span></code>·object·with·the |
6110 | class-level·default·value.</p> | 6110 | class-level·default·value.</p> |
6111 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8880">#8880</a></p> | 6111 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/8880">#8880</a></p> |
Offset 7935, 32 lines modified | Offset 7935, 46 lines modified | ||
7935 | </p> | 7935 | </p> |
7936 | </li> | 7936 | </li> |
7937 | <li><p·class="caption"·id="change-2.0.0b1-85"><span·class="target"·id="change-0a487b939ab3ad7ca93ee291b91eb410"><strong>[sqlite]·[usecase]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-0a487b939ab3ad7ca93ee291b91eb410">¶</a></span><p>Added·RETURNING·support·for·the·SQLite·dialect.··SQLite·supports·RETURNING | 7937 | <li><p·class="caption"·id="change-2.0.0b1-85"><span·class="target"·id="change-0a487b939ab3ad7ca93ee291b91eb410"><strong>[sqlite]·[usecase]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-0a487b939ab3ad7ca93ee291b91eb410">¶</a></span><p>Added·RETURNING·support·for·the·SQLite·dialect.··SQLite·supports·RETURNING |
7938 | since·version·3.35.</p> | 7938 | since·version·3.35.</p> |
7939 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6195">#6195</a></p> | 7939 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/6195">#6195</a></p> |
7940 | </p> | 7940 | </p> |
7941 | </li> | 7941 | </li> |
7942 | <li><p·class="caption"·id="change-2.0.0b1-86"><span·class="target"·id="change-ef6ce799a34b30832a9c8115e2afa920"><strong>[sqlite]·[usecase]</strong>·<a·class="changelog-reference·headerlink·reference·internal"·href="#change-ef6ce799a34b30832a9c8115e2afa920">¶</a></span><p>The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements | ||
7943 | that·may·refer·to·additional·tables·within·the·WHERE·criteria·of·the | ||
7944 | statement·without·the·need·to·use·subqueries.·This·syntax·is·invoked | ||
7945 | 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 | ||
7946 | one·table·or·other·entity·or·selectable·is·used.</p> | ||
7947 | <p>References:·<a·class="reference·external"·href="https://www.sqlalchemy.org/trac/ticket/7185">#7185</a></p> | ||
7948 | </p> | ||
7949 | </li> | ||
7950 | <li><p·class="caption"·id="change-2.0.0b1-87"><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 | ||
7951 | based·database·is·used.·This·is·set·along·with·setting·the | ||
7952 | <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 | ||
7953 | 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 | ||
7954 | hold·onto·database·connections·after·they·are·released,·did·in·fact·have·a | ||
7955 | measurable·negative·performance·impact.·As·always,·the·pool·class·is | ||
Max diff block lines reached; 6333/25003 bytes (25.33%) of diff not shown. |
Offset 1021, 29 lines modified | Offset 1021, 30 lines modified | ||
1021 | ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded | 1021 | ······should·hopefully·prevent·issues·with·large·suite·runs·on·CPU·loaded |
1022 | ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to | 1022 | ······hardware·where·the·event·loop·seems·to·become·corrupted,·leading·to |
1023 | ······cascading·failures. | 1023 | ······cascading·failures. |
1024 | ······References:·_\x8#_\x81_\x81_\x81_\x88_\x87 | 1024 | ······References:·_\x8#_\x81_\x81_\x81_\x88_\x87 |
1025 | *\x8**\x8**\x8**\x8**\x8*·2\x82.\x8.0\x80.\x8.2\x828\x88_\x8?\x8¶·*\x8**\x8**\x8**\x8**\x8* | 1025 | *\x8**\x8**\x8**\x8**\x8*·2\x82.\x8.0\x80.\x8.2\x828\x88_\x8?\x8¶·*\x8**\x8**\x8**\x8**\x8* |
1026 | Released:·March·4,·2024 | 1026 | Released:·March·4,·2024 |
1027 | *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 1027 | *\x8**\x8**\x8**\x8*·o\x8or\x8rm\x8m_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
1028 | ····*·[\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¶ | ||
1029 | ······Adjusted·the·fix·made·in·_\x8#_\x81_\x80_\x85_\x87_\x80,·released·in·2.0.23,·where·new·logic·was | ||
1030 | ······added·to·reconcile·possibly·changing·bound·parameter·values·across·cache | ||
1031 | ······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 | ||
1032 | ······logic·changes·the·approach·by·which·the·new·bound·parameter·values·are | ||
1033 | ······associated·with·the·statement,·avoiding·the·need·to·deep-copy·the | ||
1034 | ······statement·which·can·result·in·a·significant·performance·penalty·for·very | ||
1035 | ······deep·/·complex·SQL·constructs.·The·new·approach·no·longer·requires·this | ||
1036 | ······deep-copy·step. | ||
1037 | ······References:·_\x8#_\x81_\x81_\x80_\x88_\x85 | ||
1028 | 1038 | [\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¶ | |
1029 | 1039 | Fixed·regression·caused·by·_\x8#_\x89_\x87_\x87_\x89·where·using·the·“secondary”·table·in·a | |
1030 | 1040 | relationship·and_()·expression·would·fail·to·be·aliased·to·match·how·the | |
1031 | 1041 | “secondary”·table·normally·renders·within·a·_.S_.e_.l_.e_.c_.t_.._.j_.o_.i_.n_.(_.)·expression,·leading | |
1042 | to·an·invalid·query. | ||
1032 | ······leading·to·an·invalid·query. | ||
1033 | ······References:·_\x8#_\x81_\x81_\x80_\x81_\x80 | ||
1034 | [\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¶ | ||
1035 | Adjusted·the·fix·made·in·_\x8#_\x81_\x80_\x85_\x87_\x80,·released·in·2.0.23,·where·new·logic·was·added | ||
1036 | to·reconcile·possibly·changing·bound·parameter·values·across·cache·key | ||
1037 | 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 | ||
1038 | the·approach·by·which·the·new·bound·parameter·values·are·associated·with·the | ||
1039 | statement,·avoiding·the·need·to·deep-copy·the·statement·which·can·result·in·a | ||
1040 | significant·performance·penalty·for·very·deep·/·complex·SQL·constructs.·The·new | ||
1041 | approach·no·longer·requires·this·deep-copy·step. | ||
1042 | References:·_\x8#_\x81_\x81_\x80_\x8 | 1043 | References:·_\x8#_\x81_\x81_\x80_\x81_.0 |
1043 | *\x8**\x8**\x8**\x8*·e\x8en\x8ng\x8gi\x8in\x8ne\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 1044 | *\x8**\x8**\x8**\x8*·e\x8en\x8ng\x8gi\x8in\x8ne\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
1044 | ····*·[\x8[e\x8en\x8ng\x8gi\x8in\x8ne\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 1045 | ····*·[\x8[e\x8en\x8ng\x8gi\x8in\x8ne\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ |
1045 | ······Added·new·core·execution·option | 1046 | ······Added·new·core·execution·option |
1046 | ······_\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 | 1047 | ······_\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 |
1047 | ······cursor.rowcount·attribute·from·the·DBAPI·cursor·will·be·unconditionally | 1048 | ······cursor.rowcount·attribute·from·the·DBAPI·cursor·will·be·unconditionally |
1048 | ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI | 1049 | ······memoized·at·statement·execution·time,·so·that·whatever·value·the·DBAPI |
1049 | ······offers·for·any·kind·of·statement·will·be·available·using·the | 1050 | ······offers·for·any·kind·of·statement·will·be·available·using·the |
Offset 1190, 15 lines modified | Offset 1191, 15 lines modified | ||
1190 | ······Fixed·an·issue·regarding·the·use·of·the·_\x8U_\x8u_\x8i_\x8d·datatype·with·the | 1191 | ······Fixed·an·issue·regarding·the·use·of·the·_\x8U_\x8u_\x8i_\x8d·datatype·with·the |
1191 | ······_\x8U_\x8u_\x8i_\x8d_\x8._\x8a_\x8s_\x8__\x8u_\x8u_\x8i_\x8d·parameter·set·to·False,·when·using·the·pymssql·dialect.·ORM- | 1192 | ······_\x8U_\x8u_\x8i_\x8d_\x8._\x8a_\x8s_\x8__\x8u_\x8u_\x8i_\x8d·parameter·set·to·False,·when·using·the·pymssql·dialect.·ORM- |
1192 | ······optimized·INSERT·statements·(e.g.·the·“insertmanyvalues”·feature)·would | 1193 | ······optimized·INSERT·statements·(e.g.·the·“insertmanyvalues”·feature)·would |
1193 | ······not·correctly·align·primary·key·UUID·values·for·bulk·INSERT·statements, | 1194 | ······not·correctly·align·primary·key·UUID·values·for·bulk·INSERT·statements, |
1194 | ······resulting·in·errors.·Similar·issues·were·fixed·for·the·PostgreSQL·drivers | 1195 | ······resulting·in·errors.·Similar·issues·were·fixed·for·the·PostgreSQL·drivers |
1195 | ······as·well. | 1196 | ······as·well. |
1196 | *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 1197 | *\x8**\x8**\x8**\x8*·o\x8or\x8ra\x8ac\x8cl\x8le\x8e_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
1197 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[ | 1198 | ····*·[\x8[o\x8or\x8ra\x8ac\x8cl\x8le\x8e]\x8]·[\x8[p.pe.er.rf.fo.or.rm.ma.an.nc.ce.e].]·[.[b.bu.ug.g]\x8]·_\x8¶ |
1198 | ······Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value | 1199 | ······Changed·the·default·arraysize·of·the·Oracle·dialects·so·that·the·value |
1199 | ······set·by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both | 1200 | ······set·by·the·driver·is·used,·that·is·100·at·the·time·of·writing·for·both |
1200 | ······cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default. | 1201 | ······cx_oracle·and·oracledb.·Previously·the·value·was·set·to·50·by·default. |
1201 | ······The·setting·of·50·could·cause·significant·performance·regressions | 1202 | ······The·setting·of·50·could·cause·significant·performance·regressions |
1202 | ······compared·to·when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of | 1203 | ······compared·to·when·using·cx_oracle/oracledb·alone·to·fetch·many·hundreds·of |
1203 | ······rows·over·slower·networks. | 1204 | ······rows·over·slower·networks. |
1204 | ······References:·_\x8#_\x81_\x80_\x88_\x87_\x87 | 1205 | ······References:·_\x8#_\x81_\x80_\x88_\x87_\x87 |
Offset 4085, 33 lines modified | Offset 4086, 33 lines modified | ||
4085 | References:·_\x8#_\x88_\x88_\x85_\x89 | 4086 | References:·_\x8#_\x88_\x88_\x85_\x89 |
4086 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 4087 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ |
4087 | 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 | 4088 | 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 |
4088 | 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 | 4089 | 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 |
4089 | 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 | 4090 | 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 |
4090 | _\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature.·Pull·request·courtesy·Simon·Schiele. | 4091 | _\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·feature.·Pull·request·courtesy·Simon·Schiele. |
4091 | References:·_\x8#_\x88_\x89_\x80_\x85 | 4092 | References:·_\x8#_\x88_\x89_\x80_\x85 |
4093 | [\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¶ | ||
4094 | Additional·performance·enhancements·within·ORM-enabled·SQL·statements, | ||
4095 | specifically·targeting·callcounts·within·the·construction·of·ORM·statements, | ||
4096 | using·combinations·of·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8)·with·_\x8u_\x8n_\x8i_\x8o_\x8n_\x8(_\x8)·and·similar·“compound”·constructs, | ||
4097 | in·addition·to·direct·performance·improvements·to·the·corresponding_column() | ||
4098 | internal·method·that·is·used·heavily·by·the·ORM·by·constructs·like·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8) | ||
4099 | and·similar. | ||
4100 | References:·_\x8#_\x88_\x87_\x89_\x86 | ||
4092 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 4101 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
4093 | Fixed·issue·where·use·of·an·unknown·datatype·within·a·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·annotation·for·a | 4102 | Fixed·issue·where·use·of·an·unknown·datatype·within·a·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·annotation·for·a |
4094 | column-based·attribute·would·silently·fail·to·map·the·attribute,·rather·than | 4103 | column-based·attribute·would·silently·fail·to·map·the·attribute,·rather·than |
4095 | reporting·an·exception;·an·informative·exception·message·is·now·raised. | 4104 | reporting·an·exception;·an·informative·exception·message·is·now·raised. |
4096 | References:·_\x8#_\x88_\x88_\x88_\x88 | 4105 | References:·_\x8#_\x88_\x88_\x88_\x88 |
4097 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 4106 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
4098 | Fixed·a·suite·of·issues·involving·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·use·with·dictionary·types,·such·as | 4107 | Fixed·a·suite·of·issues·involving·_\x8M_\x8a_\x8p_\x8p_\x8e_\x8d·use·with·dictionary·types,·such·as |
4099 | Mapped[Dict[str,·str]·|·None],·would·not·be·correctly·interpreted·in | 4108 | Mapped[Dict[str,·str]·|·None],·would·not·be·correctly·interpreted·in |
4100 | Declarative·ORM·mappings.·Support·to·correctly·“de-optionalize”·this·type | 4109 | Declarative·ORM·mappings.·Support·to·correctly·“de-optionalize”·this·type |
4101 | including·for·lookup·in·type_annotation_map·has·been·fixed. | 4110 | including·for·lookup·in·type_annotation_map·has·been·fixed. |
4102 | References:·_\x8#_\x88_\x87_\x87_\x87 | 4111 | References:·_\x8#_\x88_\x87_\x87_\x87 |
4103 | [\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¶ | ||
4104 | Additional·performance·enhancements·within·ORM-enabled·SQL·statements, | ||
4105 | specifically·targeting·callcounts·within·the·construction·of·ORM·statements, | ||
4106 | using·combinations·of·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8)·with·_\x8u_\x8n_\x8i_\x8o_\x8n_\x8(_\x8)·and·similar·“compound”·constructs, | ||
4107 | in·addition·to·direct·performance·improvements·to·the·corresponding_column() | ||
4108 | internal·method·that·is·used·heavily·by·the·ORM·by·constructs·like·_\x8a_\x8l_\x8i_\x8a_\x8s_\x8e_\x8d_\x8(_\x8) | ||
4109 | and·similar. | ||
4110 | References:·_\x8#_\x88_\x87_\x89_\x86 | ||
4111 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ | 4112 | [\x8[o\x8or\x8rm\x8m]\x8]·[\x8[b\x8bu\x8ug\x8g]\x8]·_\x8¶ |
4112 | 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 | 4113 | 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 |
4113 | fields·with·the·__allow_unmapped__·directive·in·a·mapping·would·not·create·a | 4114 | fields·with·the·__allow_unmapped__·directive·in·a·mapping·would·not·create·a |
4114 | dataclass·with·the·correct·class-level·state·for·those·fields,·copying·the·raw | 4115 | dataclass·with·the·correct·class-level·state·for·those·fields,·copying·the·raw |
4115 | Field·object·to·the·class·inappropriately·after·dataclasses·itself·had·replaced | 4116 | Field·object·to·the·class·inappropriately·after·dataclasses·itself·had·replaced |
4116 | the·Field·object·with·the·class-level·default·value. | 4117 | the·Field·object·with·the·class-level·default·value. |
4117 | References:·_\x8#_\x88_\x88_\x88_\x80 | 4118 | References:·_\x8#_\x88_\x88_\x88_\x80 |
Offset 5471, 53 lines modified | Offset 5472, 53 lines modified | ||
5471 | ······See·also | 5472 | ······See·also |
5472 | ······_\x8R_\x8e_\x8f_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8g_\x8·_\x8i_\x8n_\x8t_\x8e_\x8r_\x8n_\x8a_\x8l_\x8·_\x8s_\x8c_\x8h_\x8e_\x8m_\x8a_\x8·_\x8t_\x8a_\x8b_\x8l_\x8e_\x8s | 5473 | ······_\x8R_\x8e_\x8f_\x8l_\x8e_\x8c_\x8t_\x8i_\x8n_\x8g_\x8·_\x8i_\x8n_\x8t_\x8e_\x8r_\x8n_\x8a_\x8l_\x8·_\x8s_\x8c_\x8h_\x8e_\x8m_\x8a_\x8·_\x8t_\x8a_\x8b_\x8l_\x8e_\x8s |
5473 | ······References:·_\x8#_\x88_\x82_\x83_\x84 | 5474 | ······References:·_\x8#_\x88_\x82_\x83_\x84 |
5474 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 5475 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ |
5475 | Added·RETURNING·support·for·the·SQLite·dialect.·SQLite·supports·RETURNING·since | 5476 | Added·RETURNING·support·for·the·SQLite·dialect.·SQLite·supports·RETURNING·since |
5476 | version·3.35. | 5477 | version·3.35. |
5477 | References:·_\x8#_\x86_\x81_\x89_\x85 | 5478 | References:·_\x8#_\x86_\x81_\x89_\x85 |
5478 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·[\x8[p\x8pe\x8er\x8rf\x8fo\x8or\x8rm\x8ma\x8an\x8nc\x8ce\x8e]\x8]·_\x8¶ | ||
5479 | SQLite·datetime,·date,·and·time·datatypes·now·use·Python·standard·lib | ||
5480 | fromisoformat()·methods·in·order·to·parse·incoming·datetime,·date,·and·time | ||
5481 | string·values.·This·improves·performance·vs.·the·previous·regular·expression- | ||
5482 | based·approach,·and·also·automatically·accommodates·for·datetime·and·time | ||
5483 | formats·that·contain·either·a·six-digit·“microseconds”·format·or·a·three-digit | ||
5484 | “milliseconds”·format. | ||
5485 | References:·_\x8#_\x87_\x80_\x82_\x89 | ||
5486 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ | 5479 | [\x8[s\x8sq\x8ql\x8li\x8it\x8te\x8e]\x8]·[\x8[u\x8us\x8se\x8ec\x8ca\x8as\x8se\x8e]\x8]·_\x8¶ |
5487 | The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements·that | 5480 | The·SQLite·dialect·now·supports·UPDATE..FROM·syntax,·for·UPDATE·statements·that |
5488 | may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement | 5481 | may·refer·to·additional·tables·within·the·WHERE·criteria·of·the·statement |
5489 | without·the·need·to·use·subqueries.·This·syntax·is·invoked·automatically·when | 5482 | without·the·need·to·use·subqueries.·This·syntax·is·invoked·automatically·when |
5490 | using·the·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e·construct·when·more·than·one·table·or·other·entity·or | 5483 | using·the·_\x8U_\x8p_\x8d_\x8a_\x8t_\x8e·construct·when·more·than·one·table·or·other·entity·or |
5491 | selectable·is·used. | 5484 | selectable·is·used. |
5492 | References:·_\x8#_\x87_\x81_\x88_\x85 | 5485 | References:·_\x8#_\x87_\x81_\x88_\x85 |
5486 | [\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¶ | ||
5487 | The·SQLite·dialect·now·defaults·to·_\x8Q_\x8u_\x8e_\x8u_\x8e_\x8P_\x8o_\x8o_\x8l·when·a·file·based·database·is | ||
5488 | used.·This·is·set·along·with·setting·the·check_same_thread·parameter·to·False. | ||
5489 | It·has·been·observed·that·the·previous·approach·of·defaulting·to·_\x8N_\x8u_\x8l_\x8l_\x8P_\x8o_\x8o_\x8l, | ||
5490 | which·does·not·hold·onto·database·connections·after·they·are·released,·did·in | ||
5491 | fact·have·a·measurable·negative·performance·impact.·As·always,·the·pool·class | ||
Max diff block lines reached; 2187/12135 bytes (18.02%) of diff not shown. |
Offset 319, 29 lines modified | Offset 319, 29 lines modified | ||
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/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> | ||
328 | </p></li> | ||
329 | <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 | ||
330 | for·asynchronous·ORM·use,·including·the·optional·run_sync()·method.</p> | ||
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> | ||
326 | <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 | 334 | <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 |
327 | of·ORM·collections·under·asyncio.</p> | 335 | of·ORM·collections·under·asyncio.</p> |
328 | </p></li> | 336 | </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> | 337 | <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 | 338 | along·many·asyncio·database·connections,·merging·ORM·results·into·a·single |
331 | <code·class="docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code>.</p> | 339 | <code·class="docutils·literal·notranslate"><span·class="pre">AsyncSession</span></code>.</p> |
332 | </p></li> | 340 | </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/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 | ||
337 | for·asynchronous·ORM·use.</p> | ||
338 | </p></li> | ||
339 | <li><p><p><a·class="reference·external"·href="../_modules/examples/asyncio/basic.html">basic.py</a>·-·Illustrates·the·asyncio·engine·/·connection·interface.</p> | ||
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"> |
345 | <span·id="directed-graphs"></span><h3>Directed·Graphs<a·class="headerlink"·href="#module-examples.graphs"·title="Link·to·this·heading">¶</a></h3> | 345 | <span·id="directed-graphs"></span><h3>Directed·Graphs<a·class="headerlink"·href="#module-examples.graphs"·title="Link·to·this·heading">¶</a></h3> |
346 | <p>An·example·of·persistence·for·a·directed·graph·structure.···The | 346 | <p>An·example·of·persistence·for·a·directed·graph·structure.···The |
347 | graph·is·stored·as·a·collection·of·edges,·each·referencing·both·a | 347 | graph·is·stored·as·a·collection·of·edges,·each·referencing·both·a |
Offset 378, 37 lines modified | Offset 378, 37 lines modified | ||
378 | subclassing·the·<code·class="docutils·literal·notranslate"><span·class="pre">HasAddresses</span></code>·mixin,·which·ensures·that·the | 378 | subclassing·the·<code·class="docutils·literal·notranslate"><span·class="pre">HasAddresses</span></code>·mixin,·which·ensures·that·the |
379 | parent·class·is·provided·with·an·<code·class="docutils·literal·notranslate"><span·class="pre">addresses</span></code>·collection | 379 | parent·class·is·provided·with·an·<code·class="docutils·literal·notranslate"><span·class="pre">addresses</span></code>·collection |
380 | which·contains·<code·class="docutils·literal·notranslate"><span·class="pre">Address</span></code>·objects.</p> | 380 | which·contains·<code·class="docutils·literal·notranslate"><span·class="pre">Address</span></code>·objects.</p> |
381 | <p>The·<a·class="reference·external"·href="../_modules/examples/generic_associations/discriminator_on_association.html">discriminator_on_association.py</a>·and·<a·class="reference·external"·href="../_modules/examples/generic_associations/generic_fk.html">generic_fk.py</a>·scripts | 381 | <p>The·<a·class="reference·external"·href="../_modules/examples/generic_associations/discriminator_on_association.html">discriminator_on_association.py</a>·and·<a·class="reference·external"·href="../_modules/examples/generic_associations/generic_fk.html">generic_fk.py</a>·scripts |
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_association.html">table_per_association.py</a>·-·Illustrates·a·mixin·which·provides·a·generic·association | ||
386 | via·a·individually·generated·association·tables·for·each·parent·class. | ||
387 | The·associated·objects·themselves·are·persisted·in·a·single·table | ||
388 | shared·among·all·parents.</p> | ||
389 | </p></li> | ||
390 | <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 | 385 | <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 |
391 | to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This | 386 | to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.··This |
392 | approach·bypasses·standard·referential·integrity | 387 | approach·bypasses·standard·referential·integrity |
393 | practices,·in·that·the·“foreign·key”·column·is·not·actually | 388 | practices,·in·that·the·“foreign·key”·column·is·not·actually |
394 | constrained·to·refer·to·any·particular·table;·instead, | 389 | constrained·to·refer·to·any·particular·table;·instead, |
395 | in-application·logic·is·used·to·determine·which·table·is·referenced.</p> | 390 | in-application·logic·is·used·to·determine·which·table·is·referenced.</p> |
396 | </p></li> | 391 | </p></li> |
392 | <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 | ||
393 | via·a·individually·generated·association·tables·for·each·parent·class. | ||
394 | The·associated·objects·themselves·are·persisted·in·a·single·table | ||
395 | shared·among·all·parents.</p> | ||
396 | </p></li> | ||
397 | <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 | ||
398 | objects·within·individual·tables,·each·one·generated·to·persist | ||
399 | those·objects·on·behalf·of·a·particular·parent·class.</p> | ||
400 | </p></li> | ||
397 | <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 | 401 | <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 |
398 | using·a·single·target·table·and·a·single·association·table, | 402 | using·a·single·target·table·and·a·single·association·table, |
399 | referred·to·by·all·parent·tables.··The·association·table | 403 | referred·to·by·all·parent·tables.··The·association·table |
400 | contains·a·“discriminator”·column·which·determines·what·type·of | 404 | contains·a·“discriminator”·column·which·determines·what·type·of |
401 | parent·object·associates·to·each·particular·row·in·the·association | 405 | parent·object·associates·to·each·particular·row·in·the·association |
402 | table.</p> | 406 | table.</p> |
403 | </p></li> | 407 | </p></li> |
404 | <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 | ||
405 | objects·within·individual·tables,·each·one·generated·to·persist | ||
406 | those·objects·on·behalf·of·a·particular·parent·class.</p> | ||
407 | </p></li> | ||
408 | </ul> | 408 | </ul> |
409 | </p> | 409 | </p> |
410 | </section> | 410 | </section> |
411 | <section·id="module-examples.materialized_paths"> | 411 | <section·id="module-examples.materialized_paths"> |
412 | <span·id="materialized-paths"></span><h3>Materialized·Paths<a·class="headerlink"·href="#module-examples.materialized_paths"·title="Link·to·this·heading">¶</a></h3> | 412 | <span·id="materialized-paths"></span><h3>Materialized·Paths<a·class="headerlink"·href="#module-examples.materialized_paths"·title="Link·to·this·heading">¶</a></h3> |
413 | <p>Illustrates·the·“materialized·paths”·pattern·for·hierarchical·data·using·the | 413 | <p>Illustrates·the·“materialized·paths”·pattern·for·hierarchical·data·using·the |
414 | SQLAlchemy·ORM.</p> | 414 | SQLAlchemy·ORM.</p> |
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/large_resultsets.html">large_resultsets.py</a>·-·In·this·series·of·tests,·we·are·looking·at·time·to·load·a·large·number | ||
485 | of·very·small·and·simple·rows.</p> | ||
484 | <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 | ||
485 | record·by·primary·key</p> | ||
486 | </p></li> | ||
487 | <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> | ||
488 | </p></li> | 486 | </p></li> |
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 | 487 | <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 |
490 | within·a·distinct·transaction,·and·afterwards·returns·to·essentially·a | 488 | within·a·distinct·transaction,·and·afterwards·returns·to·essentially·a |
491 | “closed”·state.···This·would·be·analogous·to·an·API·call·that·starts·up | 489 | “closed”·state.···This·would·be·analogous·to·an·API·call·that·starts·up |
492 | a·database·connection,·inserts·the·row,·commits·and·closes.</p> | 490 | a·database·connection,·inserts·the·row,·commits·and·closes.</p> |
493 | </p></li> | 491 | </p></li> |
494 | <li><p><p><a·class="reference·external"·href="../_modules/examples/performance/ | 492 | <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 |
495 | o | 493 | record·by·primary·key</p> |
496 | </p></li> | 494 | </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> | ||
497 | <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 | ||
498 | of·very·small·and·simple·rows.</p> | ||
499 | </p></li> | 496 | </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 | 497 | <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> | 498 | of·rows·in·bulk·(under·construction!·there’s·just·one·test·at·the·moment)</p> |
502 | </p></li> | 499 | </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 | ||
501 | of·rows·in·bulk.</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 751, 31 lines modified | Offset 751, 31 lines modified | ||
751 | <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes | 751 | <p>Several·examples·that·illustrate·the·technique·of·intercepting·changes |
752 | that·would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning | 752 | that·would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning |
Max diff block lines reached; 12304/22696 bytes (54.21%) of diff not shown. |
Offset 109, 24 lines modified | Offset 109, 24 lines modified | ||
109 | optional. | 109 | optional. |
110 | _\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 | 110 | _\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 |
111 | “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price·with | 111 | “Order”·and·a·collection·of·“Item”·objects,·associating·a·purchase·price·with |
112 | each·via·an·association·object·called·“OrderItem” | 112 | each·via·an·association·object·called·“OrderItem” |
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 | ····*·_\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession | ||
117 | ······object·for·asynchronous·ORM·use. | ||
116 | ····*·_\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 | ||
117 | ······simpler·handling·of·ORM·collections·under·asyncio. | ||
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 | ||
119 | using·asyncio.gather()·along·many·asyncio·database·connections,·merging·ORM | ||
120 | 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 | 118 | _\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. | 119 | object·for·asynchronous·ORM·use,·including·the·optional·run_sync()·method. |
123 | _\x8a_\x8s_\x8y_\x8n_\x8c_\x8__\x8o_\x8r_\x8m_\x8._\x8p_\x8y·-·Illustrates·use·of·the·sqlalchemy.ext.asyncio.AsyncSession | ||
124 | object·for·asynchronous·ORM·use. | ||
125 | _\x8b_\x8a_\x8s_\x8i_\x8c_\x8._\x8p_\x8y·-·Illustrates·the·asyncio·engine·/·connection·interface. | 120 | _\x8b_\x8a_\x8s_\x8i_\x8c_\x8._\x8p_\x8y·-·Illustrates·the·asyncio·engine·/·connection·interface. |
121 | _\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 | ||
122 | handling·of·ORM·collections·under·asyncio. | ||
123 | _\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 | ||
124 | using·asyncio.gather()·along·many·asyncio·database·connections,·merging·ORM | ||
125 | results·into·a·single·AsyncSession. | ||
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* | 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 | An·example·of·persistence·for·a·directed·graph·structure.·The·graph·is·stored | 127 | 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 | 128 | 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- | 129 | in·a·table·of·nodes.·Basic·persistence·and·querying·for·lower-·and·upper- |
130 | neighbors·are·illustrated: | 130 | neighbors·are·illustrated: |
131 | n2·=·Node(2) | 131 | n2·=·Node(2) |
132 | n5·=·Node(5) | 132 | n5·=·Node(5) |
Offset 148, 31 lines modified | Offset 148, 32 lines modified | ||
148 | Supplier,·both·subclassing·the·HasAddresses·mixin,·which·ensures·that·the | 148 | Supplier,·both·subclassing·the·HasAddresses·mixin,·which·ensures·that·the |
149 | parent·class·is·provided·with·an·addresses·collection·which·contains·Address | 149 | parent·class·is·provided·with·an·addresses·collection·which·contains·Address |
150 | objects. | 150 | objects. |
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 | 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 | 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 | 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 | _\x8w_\x8i_\x8t_\x8h_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y. | 153 | _\x8w_\x8i_\x8t_\x8h_\x8·_\x8S_\x8Q_\x8L_\x8A_\x8l_\x8c_\x8h_\x8e_\x8m_\x8y. |
154 | Listing·of·files: | 154 | Listing·of·files: |
155 | ····*·_\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a | ||
156 | ······similar·fashion·to·that·of·popular·frameworks·such·as·Django,·ROR,·etc. | ||
157 | ······This·approach·bypasses·standard·referential·integrity·practices,·in·that | ||
158 | ······the·“foreign·key”·column·is·not·actually·constrained·to·refer·to·any | ||
159 | ······particular·table;·instead,·in-application·logic·is·used·to·determine | ||
160 | ······which·table·is·referenced. | ||
155 | 161 | _\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 | |
156 | 162 | association·via·a·individually·generated·association·tables·for·each·parent | |
157 | 163 | class.·The·associated·objects·themselves·are·persisted·in·a·single·table·shared | |
164 | among·all·parents. | ||
165 | _\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 | ||
166 | association·objects·within·individual·tables,·each·one·generated·to·persist | ||
167 | those·objects·on·behalf·of·a·particular·parent·class. | ||
158 | ······table·shared·among·all·parents. | ||
159 | _\x8g_\x8e_\x8n_\x8e_\x8r_\x8i_\x8c_\x8__\x8f_\x8k_\x8._\x8p_\x8y·-·Illustrates·a·so-called·“generic·foreign·key”,·in·a·similar | ||
160 | fashion·to·that·of·popular·frameworks·such·as·Django,·ROR,·etc.·This·approach | ||
161 | bypasses·standard·referential·integrity·practices,·in·that·the·“foreign·key” | ||
162 | column·is·not·actually·constrained·to·refer·to·any·particular·table;·instead, | ||
163 | in-application·logic·is·used·to·determine·which·table·is·referenced. | ||
164 | _\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 | 168 | _\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 |
165 | association·using·a·single·target·table·and·a·single·association·table, | 169 | association·using·a·single·target·table·and·a·single·association·table, |
166 | referred·to·by·all·parent·tables.·The·association·table·contains·a | 170 | referred·to·by·all·parent·tables.·The·association·table·contains·a |
167 | “discriminator”·column·which·determines·what·type·of·parent·object·associates | 171 | “discriminator”·column·which·determines·what·type·of·parent·object·associates |
168 | to·each·particular·row·in·the·association·table. | 172 | to·each·particular·row·in·the·association·table. |
169 | _\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 | ||
170 | association·objects·within·individual·tables,·each·one·generated·to·persist | ||
171 | those·objects·on·behalf·of·a·particular·parent·class. | ||
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 |
174 | SQLAlchemy·ORM. | 175 | SQLAlchemy·ORM. |
175 | Listing·of·files: | 176 | Listing·of·files: |
176 | ····*·_\x8m_\x8a_\x8t_\x8e_\x8r_\x8i_\x8a_\x8l_\x8i_\x8z_\x8e_\x8d_\x8__\x8p_\x8a_\x8t_\x8h_\x8s_\x8._\x8p_\x8y·-·Illustrates·the·“materialized·paths”·pattern. | 177 | ····*·_\x8m_\x8a_\x8t_\x8e_\x8r_\x8i_\x8a_\x8l_\x8i_\x8z_\x8e_\x8d_\x8__\x8p_\x8a_\x8t_\x8h_\x8s_\x8._\x8p_\x8y·-·Illustrates·the·“materialized·paths”·pattern. |
177 | *\x8**\x8**\x8**\x8*·N\x8Ne\x8es\x8st\x8te\x8ed\x8d·S\x8Se\x8et\x8ts\x8s_\x8?\x8¶·*\x8**\x8**\x8**\x8* | 178 | *\x8**\x8**\x8**\x8*·N\x8Ne\x8es\x8st\x8te\x8ed\x8d·S\x8Se\x8et\x8ts\x8s_\x8?\x8¶·*\x8**\x8**\x8**\x8* |
178 | Illustrates·a·rudimentary·way·to·implement·the·“nested·sets”·pattern·for | 179 | Illustrates·a·rudimentary·way·to·implement·the·“nested·sets”·pattern·for |
Offset 220, 28 lines modified | Offset 221, 28 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 | ····*·_\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 | ||
229 | ······load·a·large·number·of·very·small·and·simple·rows. | ||
227 | ····*·_\x8s_\x8h_\x8o_\x8r_\x8t_\x8__\x8s_\x8e_\x8l_\x8e_\x8c_\x8t_\x8s_\x8._\x8p_\x8y·-·This·series·of·tests·illustrates·different·ways·to | ||
228 | ······SELECT·a·single·record·by·primary·key | ||
229 | _\x8__\x8__\x8m_\x8a_\x8i_\x8n_\x8__\x8__\x8._\x8p_\x8y·-·Allows·the·examples/performance·package·to·be·run·as·a·script. | ||
230 | _\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 | 230 | _\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 |
231 | inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to | 231 | inserts·a·row·within·a·distinct·transaction,·and·afterwards·returns·to |
232 | essentially·a·“closed”·state.·This·would·be·analogous·to·an·API·call·that | 232 | essentially·a·“closed”·state.·This·would·be·analogous·to·an·API·call·that |
233 | starts·up·a·database·connection,·inserts·the·row,·commits·and·closes. | 233 | starts·up·a·database·connection,·inserts·the·row,·commits·and·closes. |
234 | _\x8 | 234 | _\x8s_.h_.o_.r_.t_.__.s_.e_.l_.e_.c_.t_.s_.._.p_.y·-·This·series·of·tests·illustrates·different·ways·to·SELECT·a |
235 | single·record·by·primary·key | ||
236 | _\x8__\x8__\x8m_\x8a_\x8i_\x8n_\x8__\x8__\x8._\x8p_\x8y·-·Allows·the·examples/performance·package·to·be·run·as·a·script. | ||
235 | large·number·of·rows·in·bulk. | ||
236 | _\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 | ||
237 | large·number·of·very·small·and·simple·rows. | ||
238 | _\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 | 237 | _\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 |
239 | a·large·number·of·rows·in·bulk·(under·construction!·there’s·just·one·test·at | 238 | a·large·number·of·rows·in·bulk·(under·construction!·there’s·just·one·test·at |
240 | the·moment) | 239 | the·moment) |
240 | _\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 | ||
241 | large·number·of·rows·in·bulk. | ||
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* | 242 | *\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: | 243 | This·is·the·default·form·of·run: |
243 | $·python·-m·examples.performance·single_inserts | 244 | $·python·-m·examples.performance·single_inserts |
244 | Tests·to·run:·test_orm_commit,·test_bulk_save, | 245 | Tests·to·run:·test_orm_commit,·test_bulk_save, |
245 | ··············test_bulk_insert_dictionaries,·test_core, | 246 | ··············test_bulk_insert_dictionaries,·test_core, |
246 | ··············test_core_query_caching,·test_dbapi_raw_w_connect, | 247 | ··············test_core_query_caching,·test_dbapi_raw_w_connect, |
247 | ··············test_dbapi_raw_w_pool | 248 | ··············test_dbapi_raw_w_pool |
Offset 467, 28 lines modified | Offset 468, 28 lines modified | ||
467 | Several·examples·that·illustrate·the·technique·of·intercepting·changes·that | 468 | Several·examples·that·illustrate·the·technique·of·intercepting·changes·that |
468 | would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning·it·into | 469 | would·be·first·interpreted·as·an·UPDATE·on·a·row,·and·instead·turning·it·into |
469 | an·INSERT·of·a·new·row,·leaving·the·previous·row·intact·as·a·historical | 470 | an·INSERT·of·a·new·row,·leaving·the·previous·row·intact·as·a·historical |
470 | version. | 471 | version. |
471 | 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 | 472 | 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 |
472 | row·to·a·separate·history·table. | 473 | row·to·a·separate·history·table. |
473 | Listing·of·files: | 474 | Listing·of·files: |
474 | ····*·_\x8v_\x8e_\x8r_\x8s_\x8i_\x8o_\x8n_\x8e_\x8d_\x8__\x8u_\x8p_\x8d_\x8a_\x8t_\x8e_\x8__\x8o_\x8l_\x8d_\x8__\x8r_\x8o_\x8w_\x8._\x8p_\x8y·-·Illustrates·the·same·UPDATE·into·INSERT | ||
475 | ······technique·of·versioned_rows.py,·but·also·emits·an·UPDATE·on·the·o\x8ol\x8ld\x8d·row | ||
476 | ······to·affect·a·change·in·timestamp.·Also·includes·a | ||
477 | ······_\x8S_\x8e_\x8s_\x8s_\x8i_\x8o_\x8n_\x8E_\x8v_\x8e_\x8n_\x8t_\x8s_\x8._\x8d_\x8o_\x8__\x8o_\x8r_\x8m_\x8__\x8e_\x8x_\x8e_\x8c_\x8u_\x8t_\x8e_\x8(_\x8)·hook·to·limit·queries·to·only·the·most | ||
478 | ······recent·version. | ||
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·the | ||
480 | concept·of·a·“vertical·table”·structure,·like·those·illustrated·in·_\x8V_\x8e_\x8r_\x8t_\x8i_\x8c_\x8a_\x8l | ||
481 | _\x8A_\x8t_\x8t_\x8r_\x8i_\x8b_\x8u_\x8t_\x8e_\x8·_\x8M_\x8a_\x8p_\x8p_\x8i_\x8n_\x8g·examples. | ||
482 | _.v_.e_.r_.s_.i_.o_.n_.e_.d_.__.r_.o_.w_.s_.__.w_.__.v_.e_.r_.s_.i_.o_.n_.i_.d_.._.p_.y·-·Illustrates·a·method·to·intercept·changes | 475 | ····*·_.v_.e_.r_.s_.i_.o_.n_.e_.d_.__.r_.o_.w_.s_.__.w_.__.v_.e_.r_.s_.i_.o_.n_.i_.d_.._.p_.y·-·Illustrates·a·method·to·intercept·changes |
483 | objects,·turning·an·UPDATE·statement·on·a·single·row·into·an·INSERT | 476 | ······on·objects,·turning·an·UPDATE·statement·on·a·single·row·into·an·INSERT |
484 | so·that·a·new·row·is·inserted·with·the·new·data,·keeping·the | 477 | ······statement,·so·that·a·new·row·is·inserted·with·the·new·data,·keeping·the |
Max diff block lines reached; 7764/18137 bytes (42.81%) of diff not shown. |