整数在SQlite中记录良好,但在MySQL中记录为0

2024-10-02 14:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

当通过Flask SQLAlchemyFlask脚本保存到SQLite时,我的整数会正常保存。当保存到Mysql时,我的整数保存为0

我在Flask中有一个save函数—当我的dotenv变量指向SQLite时,这可以很好地保存数据。当我的dotenv指向FlaskMysql时,我得到信号的名称(string),即id,但是我所有的价格(int)都被记录为零。奇怪的是,我的解释器在保存之前会将所有的数据打印到控制台上,看起来很好——下面列出了它

我还得到一个信号(如Flask db save signal)来打印出“changes”,它也会像预期的那样显示数字,但是我的数据库没有正确地记录数据

保存功能

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)


Tags: to数据in数据库flasksqlitesignal信号
1条回答
网友
1楼 · 发布于 2024-10-02 14:22:36

看起来您正在尝试将浮点数存储在整数列中

Sqlite使用动态类型,列类型只是一个关于存储和比较值的首选方法的提示(有关详细信息,请参见https://www.sqlite.org/datatype3.html;理解亲和力的概念对于使用sqlite是非常必要的。当被要求时,它很乐意插入其他类型的值。MySQL(以及几乎所有其他数据库)的行为方式都不一样,它会将非常小、接近0的数字转换为0。您需要更改表架构,以反映实际存储的数据类型,以便与MySQL一起使用

相关问题 更多 >