You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
utils/transferIndustrySatistics_p...

522 lines
40 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#导入或计算东财二级的成交额及排序等数据
###当前交易日的计算方法
###1、获取当日的成交信息并计算排序
###2、获取当日所有指数汇总信息计算当日的占比、占比排名
###3、获取前一日多日的成交信息
###4、获取前一日多日的汇总信息等
###5、计算对比
###
###
###
###
###
###批量时计算方法
###1、获取区间第一日的数据
###2、获取前一日数据并计算如无前一日则默认一日)
###
###
###
###
from decimal import Decimal
import pymysql
def getTradingDates(dbconfig,dbcursor,state,date):
# 1日 5日 10日 20日 30日周期日期
period_trading_dateMap = {} # 用于计算成交额
period_trading_dateMap2 = {} # 用于计算区间涨跌数量等,区间涨跌等需要查询个股
# 获取周期
sql_trade_period_qurey = 'select date,week,trade from trade_dates where trade = %s and date < %s order by date desc limit 30'
sql_trade_period = state
dbcursor.execute(sql_trade_period_qurey,(sql_trade_period,date))
trading_period_dates = dbcursor.fetchall()
#前一个交易日
prevTradeDate = ''
periodIndex = 0
period_trading_dateMap
for ttrading_date in trading_period_dates:
if periodIndex == 0:
period_trading_dateMap['1']=ttrading_date[0]
elif periodIndex == 1:
prevTradeDate = ttrading_date[0]
elif periodIndex == 4:
period_trading_dateMap['5']=ttrading_date[0]
elif periodIndex == 5:
period_trading_dateMap2['5'] = ttrading_date[0]
elif periodIndex == 9:
period_trading_dateMap['10'] = ttrading_date[0]
elif periodIndex == 10:
period_trading_dateMap2['10'] = ttrading_date[0]
elif periodIndex == 19:
period_trading_dateMap['20'] = ttrading_date[0]
elif periodIndex == 20:
period_trading_dateMap2['20'] = ttrading_date[0]
elif periodIndex == 29:
period_trading_dateMap['30'] =ttrading_date[0]
elif periodIndex == 30:
period_trading_dateMap2['30'] = ttrading_date[0]
elif periodIndex > 30:
break
periodIndex += 1
return period_trading_dateMap
def getPeriodTurnOver(dbconfig,dbcursor,startDate,endDate):
periodTurnOverMap = {}
total = Decimal('0.00')
sql_trade_period_qurey = 'select code ,sum(amount) as turnover from stock_index where trade_day >= %s and trade_day < %s'
dbcursor.execute(sql_trade_period_qurey,(startDate,endDate))
totalTurnOvers = dbcursor.fetchall()
for row in totalTurnOvers:
code,turnover = row
total = turnover
sortIndex = 1
sql_trade_period_qurey = 'select code,sum(amount) as turnover from stock_index where trade_day >= %s and trade_day < %s group by code order by amount DESC '
dbcursor.execute(sql_trade_period_qurey,(startDate,endDate))
totalTurnOvers = dbcursor.fetchall()
for row in totalTurnOvers:
code,turnover = row
periodTurnOverMap[code] = {'code':code,'turnover':turnover,'total':total,'turnover_sort':sortIndex}
sortIndex += 1
return periodTurnOverMap
def getPeriodDiff(dbconfig,dbcursor,startDate,endDate,hasData):
periodStartDataMap = {}
periodEndDataMap = {}
periodDiffMap = {}
industryMap = {}
sql_trade_period_qurey = 'select code,name from stock_index where trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,'2023-05-05')
datas = dbcursor.fetchall()
for row in datas:
code,name = row
industryMap[name] = code
sql_trade_period_qurey = 'select s.code as code,s.close as close,s.open as open,sb.blemind2 as blemind2 from stocks s left join stock_basis sb on s.code = sb.code where s.trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,startDate)
datas = dbcursor.fetchall()
datasLen = 0
for row in datas:
code,close,open,blemind2 = row
if close is None:
close = Decimal('0')
periodStartDataMap[code] = {'code':code,'close':close,'open':open,'blemind2':blemind2}
datasLen +=1
if datasLen <= 0:
return
hasData = True
sql_trade_period_qurey = 'select s.code as code,s.close as close,s.open as open,sb.blemind2 as blemind2 from stocks s left join stock_basis sb on s.code = sb.code where s.trade_day = %s'
dbcursor.execute(sql_trade_period_qurey,endDate)
datas = dbcursor.fetchall()
for row in datas:
code,close,open,blemind2 = row
if close is None:
close = Decimal('0')
periodEndDataMap[code] = {'code':code,'close':close,'open':open,'blemind2':blemind2}
if code in periodStartDataMap:
if industryMap[blemind2] in periodDiffMap:
# print('close: ',close, ' bclose: ',periodStartDataMap[code]['close'] )
if Decimal(close) - periodStartDataMap[code]['close'] > 0 :
periodDiffMap[industryMap[blemind2]]['rise'] += 1
elif Decimal(close) - periodStartDataMap[code]['close'] == 0 :
periodDiffMap[industryMap[blemind2]]['flat'] += 1
else:
periodDiffMap[industryMap[blemind2]]['fall'] += 1
else:
if Decimal(close) - periodStartDataMap[code]['close'] > 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':1,'flat':0,'fall':0}
elif close - periodStartDataMap[code]['close'] == 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':1,'fall':0}
else:
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':0,'fall':1}
else:
# print('close: ',close)
if Decimal(close) > 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':1,'flat':0,'fall':0}
elif Decimal(close) == 0 :
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':1,'fall':0}
else:
periodDiffMap[industryMap[blemind2]] = {'rise':0,'flat':0,'fall':1}
return periodDiffMap
def getPreData(dbconfig,dbcursor,date):
preDataMap = {}
sql_trade_period_qurey = 'select business_date,security_code,turnover,turnover5,turnover10,turnover20,turnover30,turnover_sort,turnover5_sort,turnover10_sort,turnover20_sort,turnover30_sort,turnover_ratio,turnover5_ratio,turnover10_ratio,turnover20_ratio,turnover30_ratio,rise_number,rise5_number,rise10_number,rise20_number,rise30_number,losses_number,losses5_number,losses10_number,losses20_number,losses30_number,flat_number,flat5_number,flat10_number,flat20_number,flat30_number from dong_cai_secondary_industry_statistics where business_date = %s'
dbcursor.execute(sql_trade_period_qurey,date)
datas = dbcursor.fetchall()
for row in datas:
business_date,security_code,turnover,turnover5,turnover10,turnover20,turnover30,turnover_sort,turnover5_sort,turnover10_sort,turnover20_sort,turnover30_sort,turnover_ratio,turnover5_ratio,turnover10_ratio,turnover20_ratio,turnover30_ratio,rise_number,rise5_number,rise10_number,rise20_number,rise30_number,losses_number,losses5_number,losses10_number,losses20_number,losses30_number,flat_number,flat5_number,flat10_number,flat20_number,flat30_number = row
preDataMap[security_code] = {'business_date':business_date,'security_code':security_code,
'turnover':turnover,'turnover5':turnover5,'turnover10':turnover10,'turnover20':turnover20,'turnover30':turnover30,
'turnover_sort':turnover_sort,'turnover5_sort':turnover5_sort,'turnover10_sort':turnover10_sort,'turnover20_sort':turnover20_sort,'turnover30_sort':turnover30_sort,
'turnover_ratio':turnover_ratio,'turnover5_ratio':turnover5_ratio,'turnover10_ratio':turnover10_ratio,'turnover20_ratio':turnover20_ratio,'turnover30_ratio':turnover30_ratio,
'rise_number':rise_number,'rise5_number':rise5_number,'rise10_number':rise10_number,'rise20_number':rise20_number,'rise30_number':rise30_number,
'losses_number':losses_number,'losses5_number':losses5_number,'losses10_number':losses10_number,'losses20_number':losses20_number,'losses30_number':losses30_number,
'flat_number':flat_number,'flat5_number':flat5_number,'flat10_number':flat10_number,'flat20_number':flat20_number,'flat30_number':flat30_number}
return preDataMap
def main():
# #数据库A的连接信息NAS数据库
# db_a_config = {
# 'host': '192.168.0.222',
# 'user': 'root',
# 'password': '1qazse42W3',
# 'db': 'ry',
# 'charset': 'utf8mb4',
# }
# # 数据库B的连接信息NAS数据库
# db_b_config = {
# 'host': '192.168.0.222',
# 'user': 'root',
# 'password': '1qazse42W3',
# 'db': 'mojin',
# 'charset': 'utf8mb4',
# }
# 数据库A的连接信息腾讯云数据库
db_a_config = {
'host': '124.223.98.178',
'user': 'root',
'password': '1qazse42W3',
'db': 'ry',
'charset': 'utf8mb4',
}
# 数据库B的连接信息腾讯云数据库
db_b_config = {
'host': '124.223.98.178',
'user': 'root',
'password': '1qazse42W3',
'db': 'mojin',
'charset': 'utf8mb4',
}
try:
# 连接数据库A
db_a_conn = pymysql.connect(**db_a_config)
db_a_cursor = db_a_conn.cursor()
# 连接数据库B
db_b_conn = pymysql.connect(**db_b_config)
db_b_cursor = db_b_conn.cursor()
stock_basic_map = {}
#转换数据的日期(单日)
trans_date = '2022-03-07'
#查询交易日数据
sql_trade_qurey = 'select date,week,trade from trade_dates where trade = %s and date > %s'
sql_trade = "trading"
db_a_cursor.execute(sql_trade_qurey,(sql_trade,trans_date))
trading_dates = db_a_cursor.fetchall()
# 查询交易日期 - 交易日的指数数据 - 计算周期数据 - 转存
queryType = ['1','5','10','20','30'] #查询类型
testRet = 0
for row in trading_dates:
# 1日 5日 10日 20日 30日周期日期
period_trading_dateMap = {} # 用于计算成交额
# period_trading_dateMap = getTradingDates(db_a_conn,db_a_cursor,sql_trade,trans_date)
period_trading_dateMap2 = {} # 用于计算区间涨跌数量等,区间涨跌等需要查询个股;区间涨跌是以前一日的收盘价与当前收盘价计算的
trading_date,week,trade = row
# 获取周期,不包含当前交易日
sql_trade_period_qurey = 'select date,week,trade from trade_dates where trade = %s and date < %s order by date desc limit 30'
sql_trade_period = "trading"
db_a_cursor.execute(sql_trade_period_qurey,(sql_trade_period,trading_date))
trading_period_dates = db_a_cursor.fetchall()
#前一个交易日
prevTradeDate = ''
periodIndex = 0
for ttrading_date in trading_period_dates:
if periodIndex == 0:
period_trading_dateMap['1']=ttrading_date[0]
elif periodIndex == 1:
prevTradeDate = ttrading_date[0]
elif periodIndex == 4:
period_trading_dateMap['5']=ttrading_date[0]
elif periodIndex == 5:
period_trading_dateMap2['5'] = ttrading_date[0]
elif periodIndex == 9:
period_trading_dateMap['10'] = ttrading_date[0]
elif periodIndex == 10:
period_trading_dateMap2['10'] = ttrading_date[0]
elif periodIndex == 19:
period_trading_dateMap['20'] = ttrading_date[0]
elif periodIndex == 20:
period_trading_dateMap2['20'] = ttrading_date[0]
elif periodIndex == 29:
period_trading_dateMap['30'] =ttrading_date[0]
elif periodIndex == 30:
period_trading_dateMap2['30'] = ttrading_date[0]
elif periodIndex > 30:
break
periodIndex += 1
print('start transfer statistics ',trading_date , ' data.')
# 获取前一日数据
prevIndustryDataMap = getPreData(db_b_conn,db_b_cursor,period_trading_dateMap['1'])
hasPrevIndustryData = len(prevIndustryDataMap)
# 获取多日成交额汇总数据
turnOver5 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['5'],trading_date)
hasTurnOver5 = False if turnOver5 is None else len(turnOver5) > 0
# for data in turnOver5:
# industries_tradeDaymap[data]['turnover5'] = turnOver5[data]['turnover']
turnOver10 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['10'],trading_date)
hasTurnOver10 = False if turnOver10 is None else len(turnOver10) > 0
# for data in turnOver10:
# industries_tradeDaymap[data]['turnover10'] = turnOver5[data]['turnover']
turnOver20 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['20'],trading_date)
hasTurnOver20 = False if turnOver20 is None else len(turnOver20) > 0
# for data in turnOver20:
# industries_tradeDaymap[data]['turnover20'] = turnOver5[data]['turnover']
turnOver30 = getPeriodTurnOver(db_a_conn,db_a_cursor,period_trading_dateMap['30'],trading_date)
hasTurnOver30 = False if turnOver30 is None else len(turnOver30) > 0
# for data in turnOver30:
# industries_tradeDaymap[data]['turnover30'] = turnOver5[data]['turnover']
# 获取涨跌幅数据并统计涨跌幅
hasPeriodUpDownMap5 = False
periodUpDownMap5 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['5'],trading_date,hasPeriodUpDownMap5)
hasPeriodUpDownMap5 = False if periodUpDownMap5 is None else len(periodUpDownMap5) > 0
hasPeriodUpDownMap10 = False
periodUpDownMap10 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['10'],trading_date,hasPeriodUpDownMap10)
hasPeriodUpDownMap10 = False if periodUpDownMap10 is None else len(periodUpDownMap10) > 0
hasPeriodUpDownMap20 = False
periodUpDownMap20 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['20'],trading_date,hasPeriodUpDownMap20)
hasPeriodUpDownMap20 = False if periodUpDownMap20 is None else len(periodUpDownMap20) > 0
hasPeriodUpDownMap30 = False
periodUpDownMap30 = getPeriodDiff(db_a_conn,db_a_cursor,period_trading_dateMap['30'],trading_date,hasPeriodUpDownMap30)
hasPeriodUpDownMap30 = False if periodUpDownMap30 is None else len(periodUpDownMap30) > 0
totalTunrover = Decimal('0.00')
#查询日交易的所有成交额,用于计算占比等
sql_stock_query = 'select code,sum(amount) as turnover from stock_index where trade_day = %s '
db_a_cursor.execute(sql_stock_query,trading_date)
datas = db_a_cursor.fetchall()
for total in datas:
code , totalTunrover = total
#查询日交易数据 以成交额进行排序
sql_stock_query = 'select code,name,trade_day, open,close,high,low,differrange,volume,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow from stock_index where trade_day = %s order by amount DESC'
db_a_cursor.execute(sql_stock_query,trading_date)
datas = db_a_cursor.fetchall()
sortIndex = 1
industries_tradeDaymap = {}
#遍历交易日数据,多日数据需要单独计算; 历史数据全部从dong_cai_secondary_industry_statistics中获取没有的则以当前的为准
for stock_index_data in datas:
code,name,trade_day, open,close,high,low,differrange,volumn,amount,limitupnum,limitdownnum,suspendnum,risenum,fallnum,flatnum,componentnum,mv,pettm,pettm_mid,liqmv,rcnthigh,rcntlow = stock_index_data
business_date = trade_day
security_code = code
security_name = name
turnover = amount
turnover_sort = sortIndex
turnover_change = Decimal(prevIndustryDataMap[code]['turnover']) - turnover if hasPrevIndustryData else turnover #todo 从交易数据中获取然后计算 ,一日、多日
sortIndex +=1
# print(type(turnover),type(totalTunrover),type(turnover*Decimal('100.00')))
ratio = (turnover*Decimal('100.00') )/ totalTunrover
turnover_ratio = ratio
turnover_ratio_change = turnover_ratio - Decimal(prevIndustryDataMap[code]['turnover_ratio']) if hasPrevIndustryData else turnover_ratio #todo
turnover_sort_change = turnover_sort - Decimal(prevIndustryDataMap[code]['turnover_sort']) if hasPrevIndustryData else turnover_sort #todo
# industries_tradeDaymap[code] = {business_date,security_code,turnover_sort,rise_number,flat_number}
# 总成交额
# totalTunrover += turnover
# turnover_change = '' #todo
# turnover_ratio_change = '' #todo
# turnover_sort_change = ''#todo
turnover5 = Decimal(turnOver5[code]['turnover']) if hasTurnOver5 else turnover #todo
turnover5_change = turnover5 - Decimal(prevIndustryDataMap[code]['turnover5']) if hasPrevIndustryData else turnover5 #todo
turnover5_ratio = (turnover5*Decimal('100.00') )/ Decimal(turnOver5[code]['total']) if hasTurnOver5 else ratio #todo
turnover5_ratio_change = turnover5_ratio - Decimal(prevIndustryDataMap[code]['turnover5_ratio']) if hasPrevIndustryData else turnover5_ratio #todo
turnover5_sort = Decimal(turnOver5[code]['turnover_sort']) if hasTurnOver5 else turnover_sort #todo
turnover5_sort_change = Decimal(prevIndustryDataMap[code]['turnover5_sort']) - turnover5_sort if hasPrevIndustryData else turnover5_sort #todo
turnover10 = Decimal(turnOver10[code]['turnover']) if hasTurnOver10 else turnover #todo
turnover10_change = turnover10 - Decimal(prevIndustryDataMap[code]['turnover10']) if hasPrevIndustryData else turnover10 #todo
turnover10_ratio = (turnover10*Decimal('100.00') )/ Decimal(turnOver10[code]['total']) if hasTurnOver10 else ratio #todo
turnover10_ratio_change = turnover10_ratio - Decimal(prevIndustryDataMap[code]['turnover10_ratio']) if hasPrevIndustryData else turnover10_ratio #todo
turnover10_sort = Decimal(turnOver10[code]['turnover_sort']) if hasTurnOver10 else turnover_sort #todo
turnover10_sort_change = Decimal(prevIndustryDataMap[code]['turnover10_sort']) - turnover10_sort if hasPrevIndustryData else turnover10_sort #todo
turnover20 = Decimal(turnOver20[code]['turnover']) if hasTurnOver20 else turnover #todo
turnover20_change = turnover20 - Decimal(prevIndustryDataMap[code]['turnover20']) if hasPrevIndustryData else turnover20 #todo
turnover20_ratio = (turnover20*Decimal('100.00') )/ Decimal(turnOver20[code]['total']) if hasTurnOver20 else ratio #todo
turnover20_ratio_change = turnover20_ratio - Decimal(prevIndustryDataMap[code]['turnover20_ratio']) if hasPrevIndustryData else turnover20_ratio #todo
turnover20_sort = Decimal(turnOver20[code]['turnover_sort']) if hasTurnOver20 else turnover_sort #todo
turnover20_sort_change = Decimal(prevIndustryDataMap[code]['turnover20_sort']) - turnover20_sort if hasPrevIndustryData else turnover20_sort #todo
turnover30 = Decimal(turnOver30[code]['turnover']) if hasTurnOver30 else turnover #todo
turnover30_change = turnover30 - Decimal(prevIndustryDataMap[code]['turnover30']) if hasPrevIndustryData else turnover30 #todo
turnover30_ratio = (turnover30*Decimal('100.00') )/ Decimal(turnOver30[code]['total']) if hasTurnOver30 else ratio #todo
turnover30_ratio_change = turnover30_ratio - Decimal(prevIndustryDataMap[code]['turnover30_ratio']) if hasPrevIndustryData else turnover30_ratio #todo
turnover30_sort = Decimal(turnOver30[code]['turnover_sort']) if hasTurnOver30 else turnover_sort #todo
turnover30_sort_change = Decimal(prevIndustryDataMap[code]['turnover30_sort']) - turnover30_sort if hasPrevIndustryData else turnover30_sort #todo
rise_number = risenum
flat_number = flatnum
losses_number = fallnum
rise_number_change = rise_number - Decimal(prevIndustryDataMap[code]['rise_number']) if hasPrevIndustryData else rise_number #todo
losses_number_change = losses_number - Decimal(prevIndustryDataMap[code]['losses_number']) if hasPrevIndustryData else losses_number #todo
flat_number_change = flat_number - Decimal(prevIndustryDataMap[code]['flat_number']) if hasPrevIndustryData else flat_number #todo
rise5_number = Decimal(periodUpDownMap5[code]['rise']) #todo
rise5_number_change = rise5_number - Decimal(prevIndustryDataMap[code]['rise5_number']) if hasPrevIndustryData else rise5_number #todo
losses5_number = Decimal(periodUpDownMap5[code]['fall']) #todo
losses5_number_change = losses5_number - Decimal(prevIndustryDataMap[code]['losses5_number']) if hasPrevIndustryData else losses5_number #todo
flat5_number = Decimal(periodUpDownMap5[code]['flat']) #todo
flat5_number_change = flat5_number - Decimal(prevIndustryDataMap[code]['flat5_number']) if hasPrevIndustryData else flat5_number #todo
rise10_number = Decimal(periodUpDownMap10[code]['rise']) #todo
rise10_number_change = rise10_number - Decimal(prevIndustryDataMap[code]['rise10_number']) if hasPrevIndustryData else rise10_number #todo
losses10_number = Decimal(periodUpDownMap10[code]['fall']) #todo
losses10_number_change = losses10_number - Decimal(prevIndustryDataMap[code]['losses10_number']) if hasPrevIndustryData else losses10_number #todo
flat10_number = Decimal(periodUpDownMap10[code]['flat']) #todo
flat10_number_change = flat10_number - Decimal(prevIndustryDataMap[code]['flat10_number']) if hasPrevIndustryData else flat10_number #todo
rise20_number = Decimal(periodUpDownMap20[code]['rise']) #todo
rise20_number_change = rise20_number - Decimal(prevIndustryDataMap[code]['rise20_number']) if hasPrevIndustryData else rise20_number#todo
losses20_number = Decimal(periodUpDownMap20[code]['fall']) #todo
losses20_number_change = losses20_number - Decimal(prevIndustryDataMap[code]['losses20_number']) if hasPrevIndustryData else losses20_number #todo
flat20_number = Decimal(periodUpDownMap20[code]['flat']) #todo
flat20_number_change = flat20_number - Decimal(prevIndustryDataMap[code]['flat20_number']) if hasPrevIndustryData else flat20_number #todo
rise30_number = Decimal(periodUpDownMap30[code]['rise']) #todo
rise30_number_change = rise30_number - Decimal(prevIndustryDataMap[code]['rise30_number']) if hasPrevIndustryData else rise30_number #todo
losses30_number = Decimal(periodUpDownMap30[code]['fall']) #todo
losses30_number_change = losses30_number - Decimal(prevIndustryDataMap[code]['losses30_number']) if hasPrevIndustryData else losses30_number #todo
flat30_number = Decimal(periodUpDownMap30[code]['flat']) #todo
flat30_number_change = flat30_number - Decimal(prevIndustryDataMap[code]['flat30_number']) if hasPrevIndustryData else flat30_number #todo
# create_time =
# sql_insert = f"INSERT INTO dong_cai_secondary_industry (business_date,sort,security_code,security_name,security_type,number_ingredients,opening_price,closing_price,volume,turnover,total_capitalization,free_capitalization,change_percentage,highest_price,lowest_price,rise_number,losses_number,flat_number,rise_stop_number,losses_stop_number,stop_number,recently_high,recently_low,pe_ttm,pe_center_ttm) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s)"
# db_b_cursor.execute(sql_insert, (business_date,sort,security_code,security_name,security_type,number_ingredients,opening_price,closing_price,volume,turnover,total_capitalization,free_capitalization,change_percentage,highest_price,lowest_price,rise_number,losses_number,flat_number,rise_stop_number,losses_stop_number,stop_number,recently_high,recently_low,pe_ttm,pe_center_ttm))
industries_tradeDaymap[code] = {'business_date':business_date,'security_code':security_code,'security_name':security_name,
'turnover':turnover,'turnover_change':turnover_change,'turnover_sort':turnover_sort,'turnover_sort_change':turnover_sort_change,
'turnover_ratio':turnover_ratio,'turnover_ratio_change':turnover_ratio_change,
'turnover5' : turnover5,'turnover5_change':turnover5_change,'turnover5_ratio':turnover5_ratio,'turnover5_ratio_change':turnover5_ratio_change,'turnover5_sort':turnover5_sort,'turnover5_sort_change':turnover5_sort_change,
'turnover10' : turnover10,'turnover10_change':turnover10_change,'turnover10_ratio':turnover10_ratio,'turnover10_ratio_change':turnover10_ratio_change,'turnover10_sort':turnover10_sort,'turnover10_sort_change':turnover10_sort_change,
'turnover20' : turnover20,'turnover20_change':turnover20_change,'turnover20_ratio':turnover20_ratio,'turnover20_ratio_change':turnover20_ratio_change,'turnover20_sort':turnover20_sort,'turnover20_sort_change':turnover20_sort_change,
'turnover30' : turnover30,'turnover30_change':turnover30_change,'turnover30_ratio':turnover30_ratio,'turnover30_ratio_change':turnover30_ratio_change,'turnover30_sort':turnover30_sort,'turnover30_sort_change':turnover30_sort_change,
'rise_number':rise_number,'flat_number':flat_number,'losses_number':losses_number,'rise_number_change':rise_number_change,'flat_number_change':flat_number_change,'losses_number_change':losses_number_change,
'rise5_number':rise5_number,'flat5_number':flat5_number,'losses5_number':losses5_number,'rise5_number_change':rise5_number_change,'flat5_number_change':flat5_number_change,'losses5_number_change':losses5_number_change,
'rise10_number':rise10_number,'flat10_number':flat10_number,'losses10_number':losses10_number,'rise10_number_change':rise10_number_change,'flat10_number_change':flat10_number_change,'losses10_number_change':losses10_number_change,
'rise20_number':rise20_number,'flat20_number':flat20_number,'losses20_number':losses20_number,'rise20_number_change':rise20_number_change,'flat20_number_change':flat20_number_change,'losses20_number_change':losses20_number_change,
'rise30_number':rise30_number,'flat30_number':flat30_number,'losses30_number':losses30_number,'rise30_number_change':rise30_number_change,'flat30_number_change':flat30_number_change,'losses30_number_change':losses30_number_change}
# 构建数据并存入数据库
sql_insert = f"INSERT INTO dong_cai_secondary_industry_statistics (business_date,security_code,security_name,turnover,turnover_change,turnover_ratio,turnover_ratio_change,turnover_sort,turnover_sort_change, turnover5,turnover5_change,turnover5_ratio,turnover5_ratio_change,turnover5_sort,turnover5_sort_change,turnover10,turnover10_change,turnover10_ratio,turnover10_ratio_change,turnover10_sort,turnover10_sort_change,turnover20,turnover20_change,turnover20_ratio,turnover20_ratio_change,turnover20_sort,turnover20_sort_change, turnover30,turnover30_change,turnover30_ratio,turnover30_ratio_change,turnover30_sort,turnover30_sort_change,rise_number,rise_number_change,losses_number,losses_number_change,flat_number,flat_number_change, rise5_number,rise5_number_change,losses5_number,losses5_number_change,flat5_number,flat5_number_change, rise10_number,rise10_number_change,losses10_number,losses10_number_change,flat10_number,flat10_number_change, rise20_number,rise20_number_change,losses20_number,losses20_number_change,flat20_number,flat20_number_change, rise30_number,rise30_number_change,losses30_number,losses30_number_change,flat30_number,flat30_number_change) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s ,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
db_b_cursor.execute(sql_insert, (business_date,security_code,security_name,turnover,turnover_change,turnover_ratio,turnover_ratio_change,turnover_sort,turnover_sort_change, turnover5,turnover5_change,turnover5_ratio,turnover5_ratio_change,turnover5_sort,turnover5_sort_change,turnover10,turnover10_change,turnover10_ratio,turnover10_ratio_change,turnover10_sort,turnover10_sort_change,turnover20,turnover20_change,turnover20_ratio,turnover20_ratio_change,turnover20_sort,turnover20_sort_change, turnover30,turnover30_change,turnover30_ratio,turnover30_ratio_change,turnover30_sort,turnover30_sort_change,rise_number,rise_number_change,losses_number,losses_number_change,flat_number,flat_number_change, rise5_number,rise5_number_change,losses5_number,losses5_number_change,flat5_number,flat5_number_change, rise10_number,rise10_number_change,losses10_number,losses10_number_change,flat10_number,flat10_number_change, rise20_number,rise20_number_change,losses20_number,losses20_number_change,flat20_number,flat20_number_change, rise30_number,rise30_number_change,losses30_number,losses30_number_change,flat30_number,flat30_number_change))
# print(industries_tradeDaymap)
#提交数据到数据库B中
db_b_conn.commit()
print('successed transfer ',trading_date , ' data.' )
print('\r\n')
####dong_cai_secondary_industry_statistics
# `id` bigint(0) NOT NULL AUTO_INCREMENT,
# `business_date` date NOT NULL COMMENT '业务日期',
# `security_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证券代码',
# `security_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证券名称',
# `turnover` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额(百万元)',
# `turnover_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额变化(百万元)',
# `turnover_ratio` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额占比',
# `turnover_ratio_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额占比变化',
# `turnover_sort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额排名',
# `turnover_sort_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '成交额排名变化',
# `turnover5` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额(百万元)',
# `turnover5_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额变化(百万元)',
# `turnover5_ratio` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额占比',
# `turnover5_ratio_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额占比变化',
# `turnover5_sort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额排名',
# `turnover5_sort_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日成交额排名变化',
# `turnover10` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额(百万元)',
# `turnover10_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额变化(百万元)',
# `turnover10_ratio` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额占比',
# `turnover10_ratio_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额占比变化',
# `turnover10_sort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额排名',
# `turnover10_sort_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日成交额排名变化',
# `turnover20` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额(百万元)',
# `turnover20_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额变化(百万元)',
# `turnover20_ratio` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额占比',
# `turnover20_ratio_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额占比变化',
# `turnover20_sort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额排名',
# `turnover20_sort_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日成交额排名变化',
# `turnover30` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额(百万元)',
# `turnover30_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额变化(百万元)',
# `turnover30_ratio` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额占比',
# `turnover30_ratio_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额占比变化',
# `turnover30_sort` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额排名',
# `turnover30_sort_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日成交额排名变化',
# `rise_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '上涨家数',
# `rise_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '上涨家数变化',
# `losses_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '下跌家数',
# `losses_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '下跌家数变化',
# `flat_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '平盘家数',
# `flat_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '平盘家数变化',
# `rise5_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日上涨家数',
# `rise5_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日上涨家数变化',
# `losses5_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日下跌家数',
# `losses5_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日下跌家数变化',
# `flat5_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日平盘家数',
# `flat5_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '5日平盘家数变化',
# `rise10_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日上涨家数',
# `rise10_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日上涨家数变化',
# `losses10_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日下跌家数',
# `losses10_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日下跌家数变化',
# `flat10_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日平盘家数',
# `flat10_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '10日平盘家数变化',
# `rise20_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日上涨家数',
# `rise20_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日上涨家数变化',
# `losses20_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日下跌家数',
# `losses20_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日下跌家数变化',
# `flat20_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日平盘家数',
# `flat20_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '20日平盘家数变化',
# `rise30_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日上涨家数',
# `rise30_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日上涨家数变化',
# `losses30_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日下跌家数',
# `losses30_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日下跌家数变化',
# `flat30_number` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日平盘家数',
# `flat30_number_change` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '30日平盘家数变化',
# `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
#####
# print(datas)
# print(stock_basic_map)
# print(trading_dates)
# 查询数据库A中的数据表a1和a2的数据并进行关联
#db_a_cursor.execute('SELECT a1.id, a1.date, a1.user, a2.userName, a2.count FROM a1 JOIN a2 ON a1.id = a2.id')
#data_to_transfer = db_a_cursor.fetchall()
# 删除数据库B中表c的数据可选如果需要覆盖表c的数据
# db_b_cursor.execute('DELETE FROM c')
# 插入数据到数据库B中的表c中
# for row in data_to_transfer:
# id, date, user, userName, count = row
# sql_insert = f"INSERT INTO c (id, date, user, userName, count) VALUES (%s, %s, %s, %s, %s)"
# db_b_cursor.execute(sql_insert, (id, date, user, userName, count))
# 提交数据到数据库B中
# db_b_conn.commit()
print("数据传输完成!")
except Exception as e:
print(f"出现错误:{e}")
finally:
# 关闭连接
if db_a_cursor:
db_a_cursor.close()
if db_a_conn:
db_a_conn.close()
if db_b_cursor:
db_b_cursor.close()
if db_b_conn:
db_b_conn.close()
if __name__ == "__main__":
main()