<p>我们有三种不同的方法:</p>
<ul>
<li><p>假设已经创建了所需的表,反映它们并使用<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.tables" rel="noreferrer">^{<cd1>}</a>字典字段</p>
<pre><code>from sqlalchemy import MetaData, create_engine
CONN = create_engine(DB_URL, client_encoding="UTF-8")
META_DATA = MetaData(bind=CONN, reflect=True)
USERS_TABLE = META_DATA.tables['users']
</code></pre></li>
<li><p>正在从<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData" rel="noreferrer">^{<cd3>}</a>对象初始化中删除<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.params.reflect" rel="noreferrer">^{<cd2>}</a>标志,因为我们不使用它,而且-正在尝试创建已反映的表:</p>
<pre><code>from sqlalchemy import MetaData, Table, Column, Integer, String, Sequence, create_engine
CONN = create_engine('sqlite:///db.sql')
META_DATA = MetaData(bind=CONN)
USERS_TABLE = Table("users", META_DATA,
Column("id", Integer, Sequence("user_id_seq"), primary_key=True),
Column("first_name", String(255)),
Column("last_name", String(255))
)
META_DATA.create_all(CONN, checkfirst=True)
</code></pre></li>
<li><p>假设我们保留反射表,如果它以前是通过将<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table" rel="noreferrer">^{<cd4>}</a>对象初始值设定项<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Table.params.keep_existing" rel="noreferrer">^{<cd5>}</a>标志设置为<code>True</code>创建的:</p>
<pre><code>from sqlalchemy import MetaData, Table, Column, Integer, String, Sequence, create_engine
CONN = create_engine('sqlite:///db.sql')
META_DATA = MetaData(bind=CONN, reflect=True)
USERS_TABLE = Table("users", META_DATA,
Column("id", Integer, Sequence("user_id_seq"), primary_key=True),
Column("first_name", String(255)),
Column("last_name", String(255)),
keep_existing=True
)
META_DATA.create_all(CONN, checkfirst=True)
</code></pre></li>
</ul>
<p>选择哪一个?取决于您的用例,但我更喜欢第二个,因为看起来您没有使用反射,而且它是最简单的修改:只是从<code>MetaData</code>初始值设定项中删除标志。</p>
<hr/>
<h3>P、 S.</h3>
<p>我们总是可以在初始化<code>MetaData</code>对象后使用<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.reflect" rel="noreferrer">^{<cd9>}</a>方法进行反射:</p>
<pre><code>META_DATA.reflect()
</code></pre>
<p>我们还可以指定用<a href="http://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.MetaData.reflect.params.only" rel="noreferrer">^{<cd10>}</a>参数(可以是<a href="https://docs.python.org/2/library/functions.html#str" rel="noreferrer">^{<cd11>}</a>对象中的任何<a href="https://docs.python.org/2/glossary.html#term-iterable" rel="noreferrer">iterable</a>)反映哪些表:</p>
<pre><code>META_DATA.reflect(only=['users'])
</code></pre>
<p>以及<a href="http://docs.sqlalchemy.org/en/latest/core/reflection.html#reflecting-database-objects" rel="noreferrer">many more</a>。</p>