擅长:python、mysql、java
<p>要查询特定的列值,请看以下问题:<a href="https://stackoverflow.com/questions/11530196/flask-sqlalchemy-query-specify-column-names">Flask SQLAlchemy query, specify column names</a>。下面是顶部答案中给出的示例代码:</p>
<pre><code>result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
</code></pre>
<p>问题的症结在于,如果数据库中不存在一个新的<code>Show</code>实例,则需要创建该实例。在</p>
<p>如果数据库中有很多节目,查询数据库中的所有节目并循环查看每个潜在新节目的结果可能会变得非常低效,而通过标识查找对象是RDBMS最擅长的!在</p>
<p>此函数将检查对象是否存在,如果不存在,则创建它。灵感来自<a href="https://stackoverflow.com/a/6078058/6560549">this answer</a>:</p>
^{pr2}$
<p>所以你的例子应该是:</p>
<pre><code>def add_if_not_exists(model, **kwargs):
if not model.query.filter_by(**kwargs).first():
instance = model(**kwargs)
db.session.add(instance)
for show in show_details:
add_if_not_exists(Show, id=show['id'])
</code></pre>
<p>如果您真的想预先查询所有显示,而不是将所有的id放入一个列表中,您可以使用一个<a href="https://stackoverflow.com/a/8929320/6560549">set instead of a list</a>来加快包含测试。在</p>
<p>例如:</p>
<pre><code>show_compare = {item.show_id for item in Show.query.all()}
for show in show_details:
# ... same as your code
</code></pre>