Further changes for sqlalchemy 1.4
This commit is contained in:
parent
2f79958acb
commit
c31cb67118
@ -1,7 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from sqlalchemy import inspect
|
from sqlalchemy import inspect, text
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -62,15 +62,17 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col
|
|||||||
amount_requested = get_column_def(cols, 'amount_requested', 'amount')
|
amount_requested = get_column_def(cols, 'amount_requested', 'amount')
|
||||||
|
|
||||||
# Schema migration necessary
|
# Schema migration necessary
|
||||||
engine.execute(f"alter table trades rename to {table_back_name}")
|
with engine.begin() as connection:
|
||||||
# drop indexes on backup table
|
connection.execute(text(f"alter table trades rename to {table_back_name}"))
|
||||||
for index in inspector.get_indexes(table_back_name):
|
# drop indexes on backup table
|
||||||
engine.execute(f"drop index {index['name']}")
|
for index in inspector.get_indexes(table_back_name):
|
||||||
|
connection.execute(text(f"drop index {index['name']}"))
|
||||||
# let SQLAlchemy create the schema as required
|
# let SQLAlchemy create the schema as required
|
||||||
decl_base.metadata.create_all(engine)
|
decl_base.metadata.create_all(engine)
|
||||||
|
|
||||||
# Copy data back - following the correct schema
|
# Copy data back - following the correct schema
|
||||||
engine.execute(f"""insert into trades
|
with engine.begin() as connection:
|
||||||
|
connection.execute(text(f"""insert into trades
|
||||||
(id, exchange, pair, is_open,
|
(id, exchange, pair, is_open,
|
||||||
fee_open, fee_open_cost, fee_open_currency,
|
fee_open, fee_open_cost, fee_open_currency,
|
||||||
fee_close, fee_close_cost, fee_open_currency, open_rate,
|
fee_close, fee_close_cost, fee_open_currency, open_rate,
|
||||||
@ -104,11 +106,12 @@ def migrate_trades_table(decl_base, inspector, engine, table_back_name: str, col
|
|||||||
{strategy} strategy, {timeframe} timeframe,
|
{strategy} strategy, {timeframe} timeframe,
|
||||||
{open_trade_value} open_trade_value, {close_profit_abs} close_profit_abs
|
{open_trade_value} open_trade_value, {close_profit_abs} close_profit_abs
|
||||||
from {table_back_name}
|
from {table_back_name}
|
||||||
""")
|
"""))
|
||||||
|
|
||||||
|
|
||||||
def migrate_open_orders_to_trades(engine):
|
def migrate_open_orders_to_trades(engine):
|
||||||
engine.execute("""
|
with engine.begin() as connection:
|
||||||
|
connection.execute(text("""
|
||||||
insert into orders (ft_trade_id, ft_pair, order_id, ft_order_side, ft_is_open)
|
insert into orders (ft_trade_id, ft_pair, order_id, ft_order_side, ft_is_open)
|
||||||
select id ft_trade_id, pair ft_pair, open_order_id,
|
select id ft_trade_id, pair ft_pair, open_order_id,
|
||||||
case when close_rate_requested is null then 'buy'
|
case when close_rate_requested is null then 'buy'
|
||||||
@ -120,7 +123,7 @@ def migrate_open_orders_to_trades(engine):
|
|||||||
'stoploss' ft_order_side, 1 ft_is_open
|
'stoploss' ft_order_side, 1 ft_is_open
|
||||||
from trades
|
from trades
|
||||||
where stoploss_order_id is not null
|
where stoploss_order_id is not null
|
||||||
""")
|
"""))
|
||||||
|
|
||||||
|
|
||||||
def migrate_orders_table(decl_base, inspector, engine, table_back_name: str, cols: List):
|
def migrate_orders_table(decl_base, inspector, engine, table_back_name: str, cols: List):
|
||||||
|
@ -9,7 +9,7 @@ from typing import Any, Dict, List, Optional
|
|||||||
from sqlalchemy import (Boolean, Column, DateTime, Float, ForeignKey, Integer, String,
|
from sqlalchemy import (Boolean, Column, DateTime, Float, ForeignKey, Integer, String,
|
||||||
create_engine, desc, func, inspect)
|
create_engine, desc, func, inspect)
|
||||||
from sqlalchemy.exc import NoSuchModuleError
|
from sqlalchemy.exc import NoSuchModuleError
|
||||||
from sqlalchemy.orm import Query, relationship, declarative_base
|
from sqlalchemy.orm import Query, declarative_base, relationship
|
||||||
from sqlalchemy.orm.scoping import scoped_session
|
from sqlalchemy.orm.scoping import scoped_session
|
||||||
from sqlalchemy.orm.session import sessionmaker
|
from sqlalchemy.orm.session import sessionmaker
|
||||||
from sqlalchemy.pool import StaticPool
|
from sqlalchemy.pool import StaticPool
|
||||||
|
@ -7,7 +7,7 @@ from unittest.mock import MagicMock
|
|||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
import pytest
|
import pytest
|
||||||
from sqlalchemy import create_engine, inspect
|
from sqlalchemy import create_engine, inspect, text
|
||||||
|
|
||||||
from freqtrade import constants
|
from freqtrade import constants
|
||||||
from freqtrade.exceptions import DependencyException, OperationalException
|
from freqtrade.exceptions import DependencyException, OperationalException
|
||||||
@ -486,9 +486,10 @@ def test_migrate_old(mocker, default_conf, fee):
|
|||||||
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
||||||
|
|
||||||
# Create table using the old format
|
# Create table using the old format
|
||||||
engine.execute(create_table_old)
|
with engine.begin() as connection:
|
||||||
engine.execute(insert_table_old)
|
connection.execute(text(create_table_old))
|
||||||
engine.execute(insert_table_old2)
|
connection.execute(text(insert_table_old))
|
||||||
|
connection.execute(text(insert_table_old2))
|
||||||
# Run init to test migration
|
# Run init to test migration
|
||||||
init_db(default_conf['db_url'], default_conf['dry_run'])
|
init_db(default_conf['db_url'], default_conf['dry_run'])
|
||||||
|
|
||||||
@ -579,15 +580,16 @@ def test_migrate_new(mocker, default_conf, fee, caplog):
|
|||||||
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
||||||
|
|
||||||
# Create table using the old format
|
# Create table using the old format
|
||||||
engine.execute(create_table_old)
|
with engine.begin() as connection:
|
||||||
engine.execute("create index ix_trades_is_open on trades(is_open)")
|
connection.execute(text(create_table_old))
|
||||||
engine.execute("create index ix_trades_pair on trades(pair)")
|
connection.execute(text("create index ix_trades_is_open on trades(is_open)"))
|
||||||
engine.execute(insert_table_old)
|
connection.execute(text("create index ix_trades_pair on trades(pair)"))
|
||||||
|
connection.execute(text(insert_table_old))
|
||||||
|
|
||||||
# fake previous backup
|
# fake previous backup
|
||||||
engine.execute("create table trades_bak as select * from trades")
|
connection.execute(text("create table trades_bak as select * from trades"))
|
||||||
|
|
||||||
engine.execute("create table trades_bak1 as select * from trades")
|
connection.execute(text("create table trades_bak1 as select * from trades"))
|
||||||
# Run init to test migration
|
# Run init to test migration
|
||||||
init_db(default_conf['db_url'], default_conf['dry_run'])
|
init_db(default_conf['db_url'], default_conf['dry_run'])
|
||||||
|
|
||||||
@ -722,8 +724,9 @@ def test_migrate_mid_state(mocker, default_conf, fee, caplog):
|
|||||||
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
||||||
|
|
||||||
# Create table using the old format
|
# Create table using the old format
|
||||||
engine.execute(create_table_old)
|
with engine.begin() as connection:
|
||||||
engine.execute(insert_table_old)
|
connection.execute(text(create_table_old))
|
||||||
|
connection.execute(text(insert_table_old))
|
||||||
|
|
||||||
# Run init to test migration
|
# Run init to test migration
|
||||||
init_db(default_conf['db_url'], default_conf['dry_run'])
|
init_db(default_conf['db_url'], default_conf['dry_run'])
|
||||||
|
Loading…
Reference in New Issue
Block a user