update_data_tosql.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from jqdatasdk import *
  2. from sqlalchemy import create_engine
  3. import pandas as pd
  4. from datetime import datetime as dt
  5. import datetime
  6. import pymysql
  7. auth('18616891214', 'Ea?*7f68nD.dafcW34d!')
  8. stocks = list(get_all_securities(['stock'], date=dt.today().strftime('%Y-%m-%d')).index)
  9. engine = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/stocks?charset=utf8')
  10. stocks_List = ','.join(set(stocks))
  11. db_stocks_list = pymysql.connect(host='localhost',
  12. user='root',
  13. port=3307,
  14. password='r6kEwqWU9!v3',
  15. database='hlfx_pool')
  16. cursor_stock_list = db_stocks_list.cursor()
  17. sql = "INSERT INTO stocks_list (date,securities) VALUES('%s','%s')" % (dt.today().strftime('%Y-%m-%d'), stocks_List)
  18. cursor_stock_list.execute(sql)
  19. db_stocks_list.commit()
  20. db_stocks_list.close()
  21. print('stocks_list已入库')
  22. for fre in ['30m', '1d']:
  23. print('ready to write to mysql %s' % fre)
  24. for stock in stocks:
  25. print(stock, fre)
  26. try:
  27. index_len = pd.read_sql_table('stk%s_%s' % (stock, fre), con=engine).iloc[-1, 0]
  28. # 注意修改time delta
  29. if fre == '1d':
  30. startdate = pd.read_sql_table('stk%s_%s' % (stock, fre), con=engine).iloc[-1, 1] + datetime.timedelta(
  31. days=1)
  32. elif fre == '30m':
  33. startdate = pd.read_sql_table('stk%s_%s' % (stock, fre), con=engine).iloc[-1, 1] + datetime.timedelta(
  34. minutes=5)
  35. print(startdate)
  36. df_stock = get_price(stock, start_date=startdate, end_date=dt.today().strftime('%Y-%m-%d %H:%M:%S'),
  37. frequency=fre, fields=['open', 'close', 'high', 'low', 'volume', 'money'],
  38. skip_paused=False,
  39. fq='pre', count=None, panel=False)
  40. df_stock = df_stock.dropna(axis=0)
  41. df_stock.reset_index(inplace=True)
  42. df_stock.rename(columns={'index': 'date'}, inplace=True)
  43. df_stock.index = df_stock.index + index_len + 1
  44. df_stock.to_sql('stk%s_%s' % (stock, fre), con=engine, index=True, if_exists='append')
  45. except BaseException:
  46. df_stock = get_price(stock, start_date='2022-01-01 00:00:00',
  47. end_date=dt.today().strftime('%Y-%m-%d %H:%M:%S'),
  48. frequency=fre, fields=['open', 'close', 'high', 'low', 'volume', 'money'],
  49. skip_paused=False,
  50. fq='pre', count=None, panel=False)
  51. df_stock = df_stock.dropna(axis=0)
  52. df_stock.reset_index(inplace=True)
  53. df_stock.rename(columns={'index': 'date'}, inplace=True)
  54. df_stock.to_sql('stk%s_%s' % (stock, fre), con=engine, index=True, if_exists='append')
  55. with engine.connect() as con:
  56. con.execute("ALTER TABLE `stk%s_%s` ADD PRIMARY KEY (`date`);" % (stock, fre))