# Buggy code
def _rpc_forcebuy(self, pair: str, price: Optional[float]) -> Optional[Trade]:
    """
    Handler for forcebuy <asset> <price>
    Buys a pair trade at the given or current price
    """

    if not self._freqtrade.config.get("forcebuy_enable", False):
        raise RPCException("Forcebuy not enabled.")

    if self._freqtrade.state != State.RUNNING:
        raise RPCException("trader is not running")

    # Check pair is in stake currency
    stake_currency = self._freqtrade.config.get("stake_currency")
    if not pair.endswith(stake_currency):
        raise RPCException(
            f"Wrong pair selected. Please pairs with stake {stake_currency} pairs only"
        )
    # check if valid pair

    # check if pair already has an open pair
    trade = (
        Trade.query.filter(Trade.is_open.is_(True)).filter(Trade.pair.is_(pair)).first()
    )
    if trade:
        raise RPCException(f"position for {pair} already open - id: {trade.id}")

    # gen stake amount
    stakeamount = self._freqtrade._get_trade_stake_amount(pair)

    # execute buy
    if self._freqtrade.execute_buy(pair, stakeamount, price):
        trade = (
            Trade.query.filter(Trade.is_open.is_(True))
            .filter(Trade.pair.is_(pair))
            .first()
        )
        return trade
    else:
        return None


# Traceback (sqlalchemy.exc.InvalidRequestError)
2019-06-30 03:51:36,539 - freqtrade.rpc.telegram - INFO - Executing handler: _forcebuy for chat_id: 146554112
2019-06-30 03:51:36,545 - freqtrade.freqtradebot - INFO - Using Last Ask / Last Price
2019-06-30 03:51:37,260 - freqtrade.rpc.rpc_manager - INFO - Sending rpc message: {'type': buy, 'exchange': 'Binance', 'pair': 'ALGO/USDT', 'limit': 1.5642505330623224, 'order_type': 'market', 'stake_amount': 13811.040136000001, 'stake_currency': 'USDT', 'fiat_currency': 'USD'}
2019-06-30 03:51:37,612 - freqtrade.freqtradebot - INFO - Found open order for Trade(id=None, pair=ALGO/USDT, amount=8829.17400000, open_rate=1.56425053, open_since=closed)
2019-06-30 03:51:37,758 - freqtrade.freqtradebot - WARNING - Amount 8829.173999999999 does not match amount 8829.174
2019-06-30 03:51:37,760 - freqtrade.freqtradebot - WARNING - Could not update trade amount: Half bought? Amounts don't match
2019-06-30 03:51:37,760 - freqtrade.persistence - INFO - Updating trade (id=None) ...
2019-06-30 03:51:37,760 - freqtrade.persistence - INFO - MARKET_BUY has been fulfilled for Trade(id=None, pair=ALGO/USDT, amount=8829.17400000, open_rate=1.56425053, open_since=closed).
2019-06-30 03:51:37,761 - freqtrade.rpc.telegram - ERROR - Exception occurred within Telegram module
Traceback (most recent call last):
File "/home/dante/freqtrade/freqtrade/rpc/telegram.py", line 52, in wrapper
return command_handler(self, *args, **kwargs)
File "/home/dante/freqtrade/freqtrade/rpc/telegram.py", line 433, in _forcebuy
self._rpc_forcebuy(pair, price)
File "/home/dante/freqtrade/freqtrade/rpc/rpc.py", line 432, in _rpc_forcebuy
if self._freqtrade.execute_buy(pair, stakeamount, price):
File "/home/dante/freqtrade/freqtrade/freqtradebot.py", line 416, in execute_buy
self.update_trade_state(trade, order)
File "/home/dante/freqtrade/freqtrade/freqtradebot.py", line 539, in update_trade_state
trade.update(order)
File "/home/dante/freqtrade/freqtrade/persistence.py", line 317, in update
cleanup()
File "/home/dante/freqtrade/freqtrade/persistence.py", line 155, in cleanup
Trade.session.flush()
File "/home/dante/.local/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 2445, in flush
raise sa_exc.InvalidRequestError("Session is already flushing")
sqlalchemy.exc.InvalidRequestError: Session is already flushing

# Fixed code
def _rpc_forcebuy(self, pair: str, price: Optional[float]) -> Optional[Trade]:
    """
    Handler for forcebuy <asset> <price>
    Buys a pair trade at the given or current price
    """

    if not self._freqtrade.config.get("forcebuy_enable", False):
        raise RPCException("Forcebuy not enabled.")

    if self._freqtrade.state != State.RUNNING:
        raise RPCException("trader is not running")

    # Check pair is in stake currency
    stake_currency = self._freqtrade.config.get("stake_currency")
    if not pair.endswith(stake_currency):
        raise RPCException(
            f"Wrong pair selected. Please pairs with stake {stake_currency} pairs only"
        )
    # check if valid pair

    # check if pair already has an open pair
    trade = Trade.get_trades([Trade.is_open.is_(True), Trade.pair.is_(pair)]).first()
    if trade:
        raise RPCException(f"position for {pair} already open - id: {trade.id}")

    # gen stake amount
    stakeamount = self._freqtrade._get_trade_stake_amount(pair)

    # execute buy
    if self._freqtrade.execute_buy(pair, stakeamount, price):
        trade = Trade.get_trades(
            [Trade.is_open.is_(True), Trade.pair.is_(pair)]
        ).first()
        return trade
    else:
        return None