text: Title: Query are sending INSERT request with back_propagate
  Body: I am not sure this is a bug or not, but it seems strange that launching a query would send an INSERT request.
  
  Here is a repository to replicate the bug. https://github.com/Noezor/example_flask_sqlalchemy_bug/
  
  ### Expected Behavior
  
  For the models :
  
  ```python
  from config import db
  
  class Parent(db.Model):
      __tablename__ = "parent"
  
      id = db.Column(db.Integer(), primary_key  = True)
      name = db.Column(db.String, unique = True)
  
      children = db.relationship("Child", back_populates="parent")
  
  class Child(db.Model):
      __tablename__ = "child"
  
      id = db.Column(db.Integer(), primary_key = True)
      
      name = db.Column(db.String(32), unique = True)
      
      parent_id = db.Column(db.Integer, db.ForeignKey("parent.id"))
      parent = db.relationship("Parent", back_populates="children")
  
  ```
  And now the testscript.
  
  ```python
  from config import db
  from model import Child, Parent
  
  parent = Parent(name='John')
  if not Parent.query.filter(Parent.name == parent.name).one_or_none():
      db.session.add(parent)
      db.session.commit()
  else :
      parent = Parent.query.filter(Parent.name == parent.name).one_or_none()
  
  child1 = Child(name="Toto",parent = parent)
  
  if not Child.query.filter(Child.name == "Toto").one_or_none() :
      db.session.add(child1)
      db.session.commit()
  else :
      child1 = Child.query.filter(Child.name == "Toto").one_or_none()
  
  print("success")
  ```
   At first launch, the problem should work fine. At second launch, once the database is populated, there should not be problem either as the query will detect that the database already contains added elements.
  
  ### Actual Behavior
  
  At first launch, everything is working fine. On the other hand, at second launch, it seems that line "if not Child.query.filter(Child.name == "Toto").one_or_none() :" is sending an INSERT request.
  
  ```pytb
  2020-02-01 15:23:28,552 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
  2020-02-01 15:23:28,552 INFO sqlalchemy.engine.base.Engine ()
  2020-02-01 15:23:28,553 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
  2020-02-01 15:23:28,554 INFO sqlalchemy.engine.base.Engine ()
  2020-02-01 15:23:28,555 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
  2020-02-01 15:23:28,556 INFO sqlalchemy.engine.base.Engine SELECT parent.id AS parent_id, parent.name AS parent_name 
  FROM parent 
  WHERE parent.name = ?
  2020-02-01 15:23:28,557 INFO sqlalchemy.engine.base.Engine ('John',)
  2020-02-01 15:23:28,560 INFO sqlalchemy.engine.base.Engine SELECT parent.id AS parent_id, parent.name AS parent_name 
  FROM parent 
  WHERE parent.name = ?
  2020-02-01 15:23:28,560 INFO sqlalchemy.engine.base.Engine ('John',)
  **2020-02-01 15:23:28,567 INFO sqlalchemy.engine.base.Engine INSERT INTO child (name, parent_id) VALUES (?, ?)**
  2020-02-01 15:23:28,568 INFO sqlalchemy.engine.base.Engine ('Toto', 1)
  2020-02-01 15:23:28,569 INFO sqlalchemy.engine.base.Engine ROLLBACK
  Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
      context)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 470, in do_execute
      cursor.execute(statement, parameters)
  sqlite3.IntegrityError: UNIQUE constraint failed: child.name
  
  The above exception was the direct cause of the following exception:
  
  Traceback (most recent call last):
    File "/home/pionn/.vscode-insiders/extensions/ms-python.python-2020.1.58038/pythonFiles/ptvsd_launcher.py", line 43, in <module>
      main(ptvsdArgs)
    File "/home/pionn/.vscode-insiders/extensions/ms-python.python-2020.1.58038/pythonFiles/lib/python/old_ptvsd/ptvsd/__main__.py", line 432, in main
      run()
    File "/home/pionn/.vscode-insiders/extensions/ms-python.python-2020.1.58038/pythonFiles/lib/python/old_ptvsd/ptvsd/__main__.py", line 316, in run_file
      runpy.run_path(target, run_name='__main__')
    File "/usr/lib/python3.6/runpy.py", line 263, in run_path
      pkg_name=pkg_name, script_name=fname)
    File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
      mod_name, mod_spec, pkg_name, script_name)
    File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
      exec(code, run_globals)
    **File "/home/pionn/minimum_bug_sqlalchemy/test.py", line 13, in <module>
      if not Child.query.filter(Child.name == "Toto").one_or_none() :**
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2784, in one_or_none
      ret = list(self)
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2854, in __iter__
      self.session._autoflush()
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 1407, in _autoflush
      util.raise_from_cause(e)
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
      reraise(type(exception), exception, tb=exc_tb, cause=cause)
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 187, in reraise
      raise value
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 1397, in _autoflush
      self.flush()
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 2171, in flush
      self._flush(objects)
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 2291, in _flush
      transaction.rollback(_capture_exception=True)
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/langhelpers.py", line 66, in __exit__
      compat.reraise(exc_type, exc_value, exc_tb)
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 187, in reraise
      raise value
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 2255, in _flush
      flush_context.execute()
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/unitofwork.py", line 389, in execute
      rec.execute(self)
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/unitofwork.py", line 548, in execute
      uow
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/persistence.py", line 181, in save_obj
      mapper, table, insert)
    File "/usr/lib/python3/dist-packages/sqlalchemy/orm/persistence.py", line 835, in _emit_insert_statements
      execute(statement, params)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 945, in execute
      return meth(self, multiparams, params)
    File "/usr/lib/python3/dist-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
      return connection._execute_clauseelement(self, multiparams, params)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
      compiled_sql, distilled_params
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
      context)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1402, in _handle_dbapi_exception
      exc_info
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
      reraise(type(exception), exception, tb=exc_tb, cause=cause)
    File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 186, in reraise
      raise value.with_traceback(tb)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
      context)
    File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 470, in do_execute
      cursor.execute(statement, parameters)
  sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (sqlite3.IntegrityError) UNIQUE constraint failed: child.name [SQL: 'INSERT INTO child (name, parent_id) VALUES (?, ?)'] [parameters: ('Toto', 1)]
  ```
  I believe it happends through back_propagate as, if removed, the "bug" dissapears. Same if I don't specify a parent for the child.
  
  ### Environment
  
  * Operating system: Ubuntu 18.14
  * Python version: 3.6.3
  * Flask-SQLAlchemy version: 2.4.1 
  * SQLAlchemy version: 1.3.12
  
  