Целые числа записаны нормально в SQlite, но записаны как 0 в MySQL - PullRequest
0 голосов
/ 25 сентября 2019

При сохранении из скрипта Flask в SQLite через Flask SQLAlchemy мои целые числа сохраняются нормально.При сохранении в Mysql мои целые числа сохраняются как 0.

У меня есть функция сохранения в Flask - когда мои переменные dotenv указывают на SQLite, это сохраняет данные довольно хорошо.Когда мои dotenv указывают Flask на Mysql, я получаю имя сигнала (string), идентификатор, но все мои цены (int) записываются как ноль.Странно то, что мой интерпретатор выводит на консоль все данные перед сохранением, и это выглядит нормально - они перечислены ниже.

Я также получаю сигнал (как в сигнале сохранения Flask db), чтобы распечатать изменения', которая также показывает ожидаемые числа, и все же моя база данных не записывает данные должным образом.

Функция сохранения

def save(signal, zig_user):
    signal_to_save = Signal(**signal)
    print(f"Signal to save is {signal_to_save}")
    print(f"signal  {signal}")
    print(f"signal  takeProfitPrice1: {signal_to_save.takeProfitPrice1}")
    zig_user.signals.append(signal_to_save)
    db.session.commit()

консольный выводи для SQlite, и для MySQL


Signal to save is <Signal ETHBTC, price: 0.00001200 , targets: 0.000011400.000011900.00001300 from UserID: None>
signal  {'type': 'buy', 'exchange': 'binance', 'market': 'ETHBTC', 'limitPrice': '0.00001400', 'price': '0.00001200', 'positionSizePercentage': '2', 'stopLossPrice': '0.00001000', 'takeProfitPrice1': '0.00001140', 'takeProfitPrice2': '0.00001190', 'takeProfitPrice3
': '0.00001300', 'key': 'fb470345fdb1ef832f0a2951f270be82'}
signal  takeProfitPrice 10.00001140

сигнал сохранения колбы:

[2019-09-25 11:23:49,457] INFO in __init__: Added (2, 'ETHBTC', '0.00001140', '0.00001190', '0.00001300')

И все же, когда я смотрю в базу данных, это то, что я получаю:

SQLite: signal.takeProfitPrice1 0.00001140

MYSQL signal.takeProfitPrice1 0

У меня одна ошибка:

site-packages\pymysql\cursors.py:170: Warning: (3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguou
s.")

Обновление

Вот как выглядит моя таблица sql:

Столбец: takeProfitPrice1 Определение: takeProfitPrice1 int (11)

1 Ответ

1 голос
/ 25 сентября 2019

Похоже, вы пытаетесь сохранить число с плавающей запятой в целочисленном столбце.

Sqlite использует динамическую типизацию, а тип столбца является лишь подсказкой относительно предпочтительного способа хранения и сравнения значений (Подробности смотрите в https://www.sqlite.org/datatype3.html; понимание концепции affinity , описанной здесь, необходимо для работы с sqlite).Он с радостью вставит значения других типов при запросе.MySQL (и почти любая другая база данных) не ведет себя так же, и преобразует это очень маленькое значение, близкое к 0, к 0. Вам необходимо изменить схему таблицы, чтобы она отражала тип данных, которые вы на самом деле сохраняете, для этогоработа с MySQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...