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 我都试验过,都是这样的结果。
这块儿怎么改。有遇到过的吗?