Newer
Older
stockTray / EastMoneyPy / venv / main / eastmoney / dbConn.py
bello on 22 Oct 2020 15 KB 资金流验证1
# coding=utf-8

import pymysql
import traceback
import threading
import time
from SendEmail import Email

class MY_SQL:

    def __init__(self):
        self.db = pymysql.connect('localhost', 'root', 'eagle', 'db_east_money', charset='utf8')


    # 写入分类表
    def save_code_table(self, data):

        cursor = self.db.cursor()

        # cursor.execute('DROP TABLE IF EXISTS t_code')
        #
        # sql = '''
        #         CREATE TABLE `t_code` (
        #           `id` int(11) NOT NULL AUTO_INCREMENT,
        #           `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '代码',
        #           `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '中文名称',
        #           `type` int(11) DEFAULT NULL COMMENT '0:上证  1:深证',
        #           PRIMARY KEY (`id`)
        #         ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
        #         '''

        try:
            # 创建表
            # cursor.execute(sql)

            for i in data:
                code = str(i['f12'])
                name = str(i['f14'])
                type = str(i['f13'])

                sql = "REPLACE INTO `t_code`(`id`, `code`, `name`, `type`) VALUES (uuid(), '%s', '%s', %s)" % (code, name, type)

                cursor.execute(sql)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)

    # 写入个股详细数据
    def save_code_info_table(self, sql):

        cursor = self.db.cursor()

        try:

            cursor.execute(sql)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            print(e)


    # 写入板块分类表
    def save_bankuai_table(self, data):

        cursor = self.db.cursor()

        try:

            for i in data:
                cursor.execute(i)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)

    # 写入板块分类表
    def save_day_line_table(self, data):

        cursor = self.db.cursor()

        try:
            for i in data:
                day = str(i[0])
                kai = str(i[1])
                shou = str(i[2])
                gao = str(i[3])
                di = str(i[4])
                liang = str(i[5])
                er = str(i[6])
                fu = str(i[7])
                code = str(i[8])
                name = str(i[9])
                market = str(i[10])
                percent = str(i[11])

                sql = "REPLACE INTO `t_day_line` " \
                      "(`code`, `name`, `market`, `riqi`, `kaipan`, `shoupan`, `zuigao`, `zuidi`, `chengjiaoliang`, `chengjiaoer`, `zhenfu`, `percent`) VALUES " \
                      "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
                      (code, name, market, day, kai, shou, gao, di, liang, er, fu, percent)

                cursor.execute(sql)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)


    # 写入每日时间线表
    def save_time_line_table(self, data, currentTime):

        cursor = self.db.cursor()

        try:
            for i in data:
                # 过滤今日没有行情的记录
                if i['f2'] != '-' and i['f2'] != '':
                    code = str(i['f12'])
                    name = str(i['f14'])
                    market = str(i['f13'])
                    shijian = str(currentTime)
                    zuixinjia = str(i['f2'])
                    percent = str(i['f3'])
                    chengjiaoliang = str(i['f5'])
                    chengjiaoer = str(i['f6'])
                    zhenfu = str(i['f7'])
                    huanshoulv = str(i['f8'])
                    shiyinglv = str(i['f9'])
                    shijinglv = str(i['f10'])
                    jinkai = str(i['f17'])
                    zuoshou = str(i['f18'])
                    zuigao = str(i['f15'])
                    zuidi = str(i['f16'])

                    sql = "REPLACE INTO `t_time_line`(`code`, `name`, `market`, `shijian`, `zuixinjia`, `percent`, `chengjiaoliang`, `chengjiaoer`, `zhenfu`, `huanshoulv`, `shiyinglv`, `shijinglv`, `jinkai`, `zuoshou`, `zuigao`, `zuidi`) " \
                          "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
                          (code, name, market, shijian, zuixinjia, percent, chengjiaoliang, chengjiaoer, zhenfu, huanshoulv, shiyinglv, shijinglv, jinkai, zuoshou, zuigao, zuidi)

                    cursor.execute(sql)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)


    # 写入日线中的今日数据
    def save_today_table(self, data, today):

        cursor = self.db.cursor()

        try:
            for i in data:
                day = today
                kai = str(i['f17'])
                shou = str(i['f2'])
                gao = str(i['f15'])
                di = str(i['f16'])
                liang = str(i['f5'])
                er = str(i['f6'])
                fu = str(i['f7'])
                code = str(i['f12'])
                name = str(i['f14'])
                market = str(i['f13'])
                percent = str(i['f3'])

                sql = "REPLACE INTO `t_day_line` " \
                      "(`code`, `name`, `market`, `riqi`, `kaipan`, `shoupan`, `zuigao`, `zuidi`, `chengjiaoliang`, `chengjiaoer`, `zhenfu`, `percent`) VALUES " \
                      "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
                      (code, name, market, day, kai, shou, gao, di, liang, er, fu, percent)

                cursor.execute(sql)


            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)

    # 写入每日的实时板块资金流变动
    def save_zijinliu_bankuai_table(self, data, type):

        bkList = []

        cursor = self.db.cursor()

        try:
            for i in data:
                code = str(i['f12'])
                name = str(i['f14'])
                zhangfu = str(i['f3'])
                level_zhuli = str(i['f62'])
                level_zhuli_per = str(i['f184'])
                level_chaoda = str(i['f66'])
                level_chaoda_per = str(i['f69'])
                level_da = str(i['f72'])
                level_da_per = str(i['f75'])
                level_zhong = str(i['f78'])
                level_zhong_per = str(i['f81'])
                level_xiao = str(i['f84'])
                level_xiao_per = str(i['f87'])
                shijian = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime((i['f124'])))
                first_code = str(i['f205'])
                first_name = str(i['f204'])

                sql = "REPLACE INTO `t_zijinliu_bankuai` " \
                      "(`code`, `name`, `type`, `zhangfu`, `shijian`, `level_zhuli`, `level_zhuli_per`, `level_chaoda`, " \
                      "`level_chaoda_per`, `level_da`, `level_da_per`, `level_zhong`, `level_zhong_per`, `level_xiao`, " \
                      "`level_xiao_per`, `first_code`, `first_name`) VALUES " \
                      "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
                      (code, name, type, zhangfu, shijian, level_zhuli, level_zhuli_per, level_chaoda, level_chaoda_per,
                       level_da, level_da_per, level_zhong, level_zhong_per, level_xiao, level_xiao_per, first_code, first_name)

                cursor.execute(sql)

                info = {}
                info[0] = code
                info[1] = name
                info[2] = type
                bkList.append(info)

            self.db.commit()

            return bkList

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)


    # 写入每日的实时个股资金流变动
    def save_zijinliu_gegu_table(self, data):

        cursor = self.db.cursor()

        try:
            for i in data:

                cursor.execute(i)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)


    # 查询个股最新价
    def getLastPrice(self, code):
        cursor = self.db.cursor()
        sql = 'SELECT shijian, zuixinjia, percent FROM t_time_line WHERE `code` = '+code+' ORDER BY shijian desc limit 1; '
        try:
            cursor.execute(sql)
            results = cursor.fetchone()
            return results
        except Exception as e:
            print(e)


    # 查询待通知列表
    def getNotifyList(self):
        cursor = self.db.cursor()
        sql = 'SELECT * FROM t_notify t WHERE t.maxType = 0 or t.minType = 0; '
        try:
            cursor.execute(sql)
            results = cursor.fetchall()
            return results
        except Exception as e:
            print(e)


    # 更新通知列表个股的状态
    def updateNotifyType(self, id, max, min, percent):
        cursor = self.db.cursor()
        sql = 'UPDATE t_notify SET maxType = %s, minType = %s, percent = %s, updateTime = NOW() WHERE id= %s;' % \
              (max, min, percent, id)
        try:
            cursor.execute(sql)
            self.db.commit()
        except Exception as e:
            self.db.rollback();
            print(e)


    # 更新通知列表个股的状态
    def resetNotifyList(self):
        cursor = self.db.cursor()
        sql = 'SELECT id FROM t_notify; '
        try:
            cursor.execute(sql)
            results = cursor.fetchall()

            for i in results:
                s = 'UPDATE t_notify SET maxType = 0, minType = 0, percent = 0 WHERE id = %s;' % \
                    (i[0])
                cursor.execute(s)
                self.db.commit()
        except Exception as e:
            self.db.rollback();
            print(e)


    # 写入临时个股连续2日高涨幅表
    def save_tmp_day_line_table(self, data):

        cursor = self.db.cursor()

        try:
            for i in data:
                id = str(i[0])
                code = str(i[1])
                name = str(i[2])
                market = str(i[3])
                day = str(i[4])
                kai = str(i[5])
                shou = str(i[6])
                gao = str(i[7])
                di = str(i[8])
                liang = str(i[9])
                er = str(i[10])
                fu = str(i[11])
                percent = str(i[12])

                sql = "REPLACE INTO `t_tmp_day_line` " \
                      "(`id`, `code`, `name`, `market`, `riqi`, `kaipan`, `shoupan`, `zuigao`, `zuidi`, `chengjiaoliang`, `chengjiaoer`, `zhenfu`, `percent`) VALUES " \
                      "('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % \
                      (id, code, name, market, day, kai, shou, gao, di, liang, er, fu, percent)

                cursor.execute(sql)

            self.db.commit()

        except Exception as e:
            self.db.rollback()
            Email.sendErr()
            print(e)


    # 查询00,60开头的code
    def get3060CodeList(self):
        cursor = self.db.cursor()
        sql = "SELECT code FROM t_code where code like '00%' or code like '60%';"
        try:
            cursor.execute(sql)
            results = cursor.fetchall()
            return results
        except Exception as e:
            print(e)

    # 查询code的日线
    def getDayLineList(self, code, fromDay):
        cursor = self.db.cursor()
        sql = "SELECT * FROM t_day_line WHERE code = '%s' and riqi >= '%s' order by riqi DESC;" % \
              (code, fromDay)
        try:
            cursor.execute(sql)
            results = cursor.fetchall()
            return results
        except Exception as e:
            print(e)


    # 查询code的交易日期
    def getTradeDayFromCode(self, code):
        cursor = self.db.cursor()
        sql = "SELECT DATE_FORMAT(shijian,'%%Y-%%m-%%d') day FROM t_time_line WHERE `code` = '%s' GROUP BY DATE_FORMAT(shijian, '%%Y-%%m-%%d') ORDER BY shijian;" % code
        try:
            cursor.execute(sql)
            return cursor.fetchall()

        except Exception as e:
            print(e)

    # 查询code的某一交易日的资金流主力记录
    def getZhuLiPerFromDay(self, code, day):
        cursor = self.db.cursor()
        sql = "SELECT t.zuixinjia, z.zhangfu, z.level_zhuli_per, z.shijian FROM t_zijinliu_gegu z LEFT JOIN t_time_line t ON z.`code` = t.`code` AND DATE_FORMAT(z.shijian,'%Y-%m-%d') = DATE_FORMAT(t.shijian,'%Y-%m-%d') AND z.zhangfu = t.percent WHERE z.`code`='"+code+"' and z.shijian LIKE '"+day+"%' ORDER BY z.shijian;"
        try:
            cursor.execute(sql)
            return cursor.fetchall()

        except Exception as e:
            print(e)

    # 保存yanzheng1的计算结果
    def saveYanZheng1(self, code, earn, price, time):
        cursor = self.db.cursor()
        sql = "INSERT INTO `t_yanzheng1` " \
              "(`code`, `earn`, `price`, `time`) VALUES " \
              "('%s', '%s', '%s', '%s')" % \
              (code, earn, price, time)

        cursor.execute(sql)

        self.db.commit()


    # 获取yanzheng1涨幅靠前的code
    def calcYanZheng1Code(self):
        cursor = self.db.cursor()
        sql = "SELECT t3.CODE FROM (SELECT t.CODE,sum(t.earn) AS e,t.price FROM t_yanzheng2 t WHERE t.`code` IN (SELECT t2.CODE FROM t_yanzheng2 t2 GROUP BY t2.`code`) GROUP BY t.CODE) AS t3 WHERE t3.e> 0 AND t3.e/t3.price> 0.5;"
        try:
            cursor.execute(sql)
            return cursor.fetchall()
        except Exception as e:
            print(e)

    # 保存yanzheng1的结果code
    def saveYanZheng1Code(self, code):
        cursor = self.db.cursor()
        sql = "INSERT INTO t_yanzheng_notify (code, STATUS) VALUES ('%s', 0);" % code
        cursor.execute(sql)
        self.db.commit()

    def updateYanZheng1Code(self, id):
        cursor = self.db.cursor()
        sql = "UPDATE t_yanzheng_notify SET STATUS = 1 WHERE id = '%s';" % id
        cursor.execute(sql)
        self.db.commit()



    def getYanZheng1Code(self):
        cursor = self.db.cursor()
        sql = "SELECT id, code FROM t_yanzheng_notify WHERE STATUS = 0;"
        cursor.execute(sql)
        return cursor.fetchall()

    def getLastZiJinGeGu(self, code, day):
        cursor = self.db.cursor()
        sql = "SELECT code, name, shijian, zhangfu, level_zhuli_per FROM t_zijinliu_gegu WHERE `code` = '%s' and DATE_FORMAT(shijian, '%%Y-%%m-%%d') = '%s' ORDER BY shijian DESC limit 1;" % \
              (code, day)
        cursor.execute(sql)
        return cursor.fetchone()


    def resetYanzhengNotify(self):
        cursor = self.db.cursor()
        sql = 'SELECT id FROM t_yanzheng_notify where status = 1; '
        try:
            cursor.execute(sql)
            results = cursor.fetchall()

            for i in results:
                s = 'UPDATE t_yanzheng_notify SET status = 0 WHERE id = %s;' % \
                    (i[0])
                cursor.execute(s)
                self.db.commit()
        except Exception as e:
            self.db.rollback();
            print(e)

    # 关闭数据库连接
    def closeDB(self):
        self.db.close()


# my = MY_SQL()
# my.save_to_profit("2019-04-15", "000014", "ssss", "ffff", "12.96")
# print(my.get_pre_day_data('000957', '2019-04-15'))
# my.cale_profit(10, 6)