擅长:python、mysql、java
<p>SQLAlchemy对支持它的DBs使用<code>INSERT .. RETURNING</code>来获取主键,或者对不支持它的DBs使用像<a href="http://dev.mysql.com/doc/refman/5.7/en/mysql-insert-id.html" rel="nofollow">^{<cd2>}</a>这样的特殊函数</p>
<p>对于默认值,它尝试使用<code>RETURNING</code>,但如果不支持,则必须使用另一个<code>SELECT</code>。你知道吗</p>
<p>此外,在特定情况下(例如,当<code>INSERT</code>语句被批处理时,请参见<a href="https://groups.google.com/d/msg/sqlalchemy/3l6RhfAFpvM/3OqL6aXJo70J" rel="nofollow">this mailing list post</a>),可能无法使用<code>RETURNING</code>(甚至在支持的DBs上)。你知道吗</p>
<p>最后,SQLAlchemy只在默认情况下获取<code>INSERT</code>之后的主键。因此,只有主键“立即”可用,而未配置的默认列是“首次访问时加载”。如果需要它来获取生成的值,请指定<a href="http://docs.sqlalchemy.org/en/latest/core/defaults.html#triggered-columns" rel="nofollow">^{<cd8>}</a>。(在DB不支持<code>RETURNING</code>并且您为列指定了<code>FetchedValue</code>的情况下,我不确定它是否仍然使用立即数<code>SELECT</code>获取值,或者只是返回到“首次访问时加载”。)</p>