libiya2000 wrote:
青青子荆 wrote:
libiya2000 wrote:
shunyuzhiqian wrote:
hi 我也遇到相同的问题了,请问你是如何处理这块,而解决的?
请参考一下13楼也是不好用,我在windows下完全可以用,可是换到Ubuntu20.04 就不好用了。
在def record_tick(self, tick: TickData):里面加打印函数也没反应。
后来通过main_engine.add_engine(WholeMarketRecorder)的方式让def record_tick(self, tick: TickData):里面有了打印。
但是实际上仍然没有在sql里写入数据。
而且全程连个报错也没有出现。
========================================================
问题找到了,在我的版本上面
     def save_tick_data(self, ticks: List[TickData]) -> bool:
        """"""
    # Convert bar object to dict and adjust timezone
    data = []
    for tick in ticks:
        tick.datetime = convert_tz(tick.datetime)
        d = tick.__dict__
        d["exchange"] = d["exchange"].value
        d.pop("gateway_name")
        d.pop("vt_symbol")
        data.append(d)
    # Upsert data into database
    with self.db.atomic():
        for c in chunked(data, 50):
            DbTickData.insert_many(c).on_conflict_replace().execute()
旧版本这个函数有问题,多了个            d["interval"] = d["interval"].value
新版本已经没有这个问题了。
青青子荆 wrote:
libiya2000 wrote:
shunyuzhiqian wrote:
hi 我也遇到相同的问题了,请问你是如何处理这块,而解决的?
请参考一下13楼
也是不好用,我在windows下完全可以用,可是换到Ubuntu20.04 就不好用了。
在def record_tick(self, tick: TickData):里面加打印函数也没反应。
后来通过main_engine.add_engine(WholeMarketRecorder)的方式让def record_tick(self, tick: TickData):里面有了打印。
但是实际上仍然没有在sql里写入数据。
而且全程连个报错也没有出现。
自己找到问题点了, 需要把第三方库peewee.py文件里的      DATETIME='DATETIME', 修改位  DATETIME='DATETIME(3)', 如下:
FIELD = attrdict(
    AUTO='INTEGER',
    BIGAUTO='BIGINT',
    BIGINT='BIGINT',
    BLOB='BLOB',
    BOOL='SMALLINT',
    CHAR='CHAR',
    DATE='DATE',
    DATETIME='DATETIME(3)',
    DECIMAL='DECIMAL',
    DEFAULT='',
    DOUBLE='REAL',
    FLOAT='REAL',
    INT='INTEGER',
    SMALLINT='SMALLINT',
    TEXT='TEXT',
    TIME='TIME',
    UUID='TEXT',
    UUIDB='BLOB',
    VARCHAR='VARCHAR')
我用楼主的代码加载tick数据到mysql的时候,500毫秒级的数据就存不到mysql,  就被忽略了,楼主的代码我用的没问题,但是感觉python 在处理mysql数据的datetime的时候,吧毫秒级别的处理没了。
mysql5.6 和 mysql8.0 我都试验过,都是这样的结果。
这块儿怎么改。有遇到过的吗?