def unpack(self, output): """ Unpack the boot image into the output directory. """ if Bootimg.FORMAT_BEFORE_UNPACK: self.imgFormat.format() # Try unpack tool set to find the suitable one self.bootType = self.TOOLKIT.parseType(self.bootfile) # Check whether the tools exists if self.bootType == None: raise ValueError("Unknown boot image type: " + self.bootfile) # Execute the unpack command unpackTool = self.TOOLKIT.getTools(self.bootType, "UNPACK") cmd = "%s %s %s" % (commands.mkarg(unpackTool), commands.mkarg( self.bootfile), commands.mkarg(output)) (status, result) = commands.getstatusoutput(cmd) if status != 0: print ">>> Unpack failed" print result else: print ">>> Unpack %s %s --> %s" % (self.bootType, self.bootfile, output) # Store the used tools to output Toolkit.storeType(self.bootType, output)
def Aliyun(self): passwd = Toolkit.getUserData('data.cfg')['alipasswd'] print(passwd) conn = pymysql.connect(host='', # 远程主机的ip地址, user='', # MySQL用户名 db='', # database名 passwd=passwd, # 数据库密码 port=3306, # 数据库监听端口,默认3306 charset="utf8") # 指定utf8编码的连接 cursor = conn.cursor() cursor.execute('SELECT VERSION()') data = cursor.fetchone() print(data) # 已经连通了,可以开搞。 id = 31 cmd1 = "insert into `aws_user_action_history_data`(`history_id`,`associate_content`,`associate_attached`,`addon_data`) values ('%d','huati','',''),('%d','','',''),('%d','Rocky-Title','ROCK-Content','')" % ( id, id + 1, id + 2) cursor.execute(cmd1) # conn.commit() topic_id = 7 title = "Hello" + str(topic_id) cmd2 = "insert into `aws_topic`(`topic_id`,`topic_title`,`add_time`,`discuss_count`,`topic_description`,`topic_pic`,`topic_lock`,`focus_count`,`user_related`,`url_token`,`merged_id`,`seo_title`,`parent_id`,`is_parent`,`discuss_count_last_week`,`discuss_count_last_month`,`discuss_count_update`) values('%d','huati5','1493370061','1','',null,'0','1','0',null,'0',null,'0','0','1','1','1493370061')" % topic_id cursor.execute(cmd2) # cursor.commit() arti_id = 5 cmd3 = "insert into `aws_article`(`id`,`uid`,`title`,`message`,`comments`,`views`,`add_time`,`has_attach`,`lock`,`votes`,`title_fulltext`,`category_id`,`is_recommend`,`chapter_id`,`sort`) values('%d','1','ddThe Rocky23 IC ************TITLE','dddThe Rocky IC Content !!!!!!!!','0','1','1493370061','0','0','0','ic title','1','0',null,'0')" % arti_id cursor.execute(cmd3) # cursor.commit() cmd4 = "insert into `aws_topic_relation`(`id`,`topic_id`,`item_id`,`add_time`,`uid`,`type`) values('3','4','3','1493370061','1','article')" # cursor.execute(cmd4) conn.commit() conn.close()
def __init__(self,retry=5,local=False): if local: for i in range(retry): try: self.bases_save = ts.get_stock_basics() # print(self.bases_save) self.bases_save=self.bases_save.reset_index() self.bases_save.to_csv('bases.csv') self.bases_save.to_sql('bases',engine,if_exists='replace') if self.bases_save: break except Exception as e: if i>=4: self.bases_save=pd.DataFrame() exit() continue else: self.bases_save = pd.read_sql('bases',engine,index_col='index') self.base=self.bases_save # 因为网速问题,手动从本地抓取 self.today = time.strftime("%Y-%m-%d", time.localtime()) # self.base = pd.read_csv('bases.csv', dtype={'code': np.str}) self.all_code = self.base['code'].values self.working_count = 0 self.mystocklist = Toolkit.read_stock('mystock.csv')
def push_msg(name, price, percent, status): cfg = Toolkit.getUserData('data.cfg') from_mail = cfg['from_mail'] password = cfg['password'] to_mail = cfg['to_mail'] obj = MailSend('smtp.qq.com', from_mail, password, to_mail) obj.send_txt(name, price, percent, status)
def tarxz(self, from_file, to_file=None, from_file_type='file'): """压缩文件 tar.xz 将给定的文件压缩成 xz 格式的文件 注意: 压缩文件的存放位置暂时只支持在from_file 文件的目录下 Args: from_file: 需要压缩的文件 to_file: 压缩成为的文件 from_file_type: from_file 文件的类型 是文件 还是 目录 Return: 返回一个压缩的文件路径和文件名称 Raise: None """ if not to_file: # 判断并构造压缩文件名 to_file = '{file}.tar.xz'.format(file=from_file) # 获得文件名和文件所在路径 form_file_path, from_file_name = self.get_file_path_and_name(from_file) cmd = 'cd {file_path} && tar -Jcf {to_file} {file_name}'.format( file_path = form_file_path, to_file = to_file, file_name = from_file_name, ) # 执行打包命令 is_ok = Toolkit.exec_cmd(cmd) return is_ok, to_file, cmd
def save_sql(self): cfg_file=os.path.join(os.path.dirname(__file__),'data.cfg') data=Toolkit.getUserData(cfg_file) sql_pwd=data['MYSQL_PASSWORD'] self.engine=create_engine('mysql+pymysql://root:%s@localhost/db_daily?charset=utf8' %sql_pwd) # self.df_today_all=ts.get_today_all() self.df_today_all.to_sql(self.today,self.engine,if_exists='replace')
def save_sql(self): data = Toolkit.getUserData() sql_pwd = data['mysql_password'] self.engine = create_engine( 'mysql://*****:*****@localhost/daily_data?charset=utf8' % sql_pwd) self.df_today_all = ts.get_today_all() self.df_today_all.to_sql(self.today, self.engine)
def __init__(self): self.host = 'http://www.jubi.com' with open('coin_list.cfg') as f: c_content = f.read() self.d_content = json.loads(c_content) # x=zip(* d_content) # print x #为什么得不到想要的结果? self.coin_list = self.d_content.keys() self.coin_name = self.d_content.values() self.private_key = Toolkit.getUserData('data.cfg')['private_key'] self.public_key = Toolkit.getUserData('data.cfg')['public_key'] self.md5 = self.getHash(self.private_key)
def quanshan(): data = Toolkit.getUserData('data.cfg') print data ts.set_broker('htzq', user=data['huatai'], passwd=data['huatai_passwd']) ts.get_broker() htzq = ts.TraderAPI('htzq') htzq.login() info = htzq.baseinfo() print info
def __init__(self): path=os.path.join(os.getcwd(),'data') if os.path.exists(path)==False: os.mkdir(path) print("Please put data under data folder") exit() os.chdir(path) self.stockList=Toolkit.read_stock('mystock.csv') self.bases=pd.read_csv('bases.csv',dtype={'code':np.str})
def save_sql(self): cfg_file = os.path.join(os.path.dirname(__file__), 'data.cfg') data = Toolkit.getUserData(cfg_file) sql_pwd = data['MYSQL_PASSWORD'] self.engine = create_engine( 'mysql+pymysql://root:%s@localhost/db_daily?charset=utf8' % sql_pwd) # self.df_today_all=ts.get_today_all() self.df_today_all.to_sql(self.today, self.engine, if_exists='replace')
def __init__(self): #self.bases=ts.get_stock_basics() #self.bases.to_csv('bases.csv') # 因为网速问题,手动从本地抓取 self.today = time.strftime("%Y-%m-%d", time.localtime()) self.base = pd.read_csv('bases.csv', dtype={'code': np.str}) self.all_code = self.base['code'].values self.working_count = 0 self.mystocklist = Toolkit.read_stock('mystock.csv')
def __init__(self): cfg = Toolkit.getUserData("data.cfg") self.public_key = cfg['public_key'] self.private_key = cfg['private_key'] self.w_name = u'Stefan' itchat.auto_login(hotReload=True) account = itchat.get_friends(self.w_name) for i in account: # print("pinyin: ",i[u'PYQuanPin']) if i[u'PYQuanPin'] == self.w_name: self.toName = i['UserName']
def __init__(self): self.bases_save=ts.get_stock_basics() self.bases_save.to_csv('bases.csv') # 因为网速问题,手动从本地抓取 self.today = time.strftime("%Y-%m-%d", time.localtime()) self.base = pd.read_csv('bases.csv', dtype={'code': np.str}) self.all_code = self.base['code'].values self.working_count=0 self.mystocklist = Toolkit.read_stock('mystock.csv')
def bbs_filename_check(): url = 'http://bbs.sysu.edu.cn/bbstcon?board=Love&file=M.1104508652.A' headers = {'User-Agent': agent} resp = requests.get(url, headers=headers) resp.encoding = 'gbk' content = resp.text tree = etree.HTML(content) title = tree.xpath('//title/text()')[0] print title filename = Toolkit.filename_filter(title) print filename
def statAndShowLength(stats, flength="", picName="", picTitle="The Length Distribution", xlabel="Frequency of Instruction Length", ylabel="Instruction Length"): lenDict = {} for stat in stats: if not stat.has_key('nbytes'): print stat tlen = stat['nbytes'] if lenDict.has_key(tlen): lenDict[tlen] += 1 else: lenDict[tlen] = 1 if len(flength) > 0: Toolkit.writeJsonFile(flength, lenDict) Toolkit.showProportion(lenDict, picName, picTitle) # Toolkit.showHistogram(lenDict, picName, picTitle, xlabel, ylabel) return lenDict
def statAndShowAddrMode(stats, fmode="", picName="", picTitle="The Addressing Mode Distribution", xlabel="Frequency of Addressing Mode", ylabel="Addressing Mode", labelDict=Addressing.modeLabelDict): modeDict = {} for stat in stats: for i in range(0, stat['nOPs']): mode = stat['op' + str(i + 1) + '_mode'] if modeDict.has_key(mode): modeDict[mode] += 1 else: modeDict[mode] = 1 if len(fmode) > 0: Toolkit.writeJsonFile(fmode, modeDict) # Toolkit.showProportion(modeDict, picName, picTitle) Toolkit.showHistogram(modeDict, picName, picTitle, xlabel, ylabel, labelDict) return modeDict
def __init__(self): cfg = Toolkit.getUserData('data.cfg') self.public_key = cfg['public_key'] self.private_key = cfg['private_key'] self.host = 'https://www.jubi.com' self.coin_list = [ 'IFC', 'DOGE', 'EAC', 'DNC', 'MET', 'ZET', 'SKT', 'YTC', 'PLC', 'LKC', 'JBC', 'MRYC', 'GOOC', 'QEC', 'PEB', 'XRP', 'NXT', 'WDC', 'MAX', 'ZCC', 'HLB', 'RSS', 'PGC', 'RIO', 'XAS', 'TFC', 'BLK', 'FZ', 'ANS', 'XPM', 'VTC', 'KTC', 'VRC', 'XSGS', 'LSK', 'PPC', 'ETC', 'GAME', 'LTC', 'ETH', 'BTC' ]
def statAndShowAddrLength(stats, modes, fname="", picName="", picTitle="Address Length Distribution", xlabel="Frequency of Address Length", ylabel="Address Length"): lenDict = {} for stat in stats: for i in range(0, stat['nOPs']): op = 'op' + str(i + 1) mode = stat[op + '_mode'] if mode in modes: length = Addressing.checkAddrLen(stat[op], mode) if lenDict.has_key(length): lenDict[length] += 1 else: lenDict[length] = 1 if len(fname) > 0: Toolkit.writeJsonFile(fname, lenDict) # Toolkit.showProportion(lenDict, picName, picTitle) Toolkit.showHistogram(lenDict, picName, picTitle, xlabel, ylabel) return lenDict
def turnover(self, coin): i = coin.lower() coins = Toolkit.getUserData('coins.csv') total = long(coins[i]) p = self.getOrder(i) print(p) amount = 0.00 for j in p: t = j['amount'] amount = float(t) + amount #current=float(self.real_time_ticker(i)['last']) turn_over = amount * 1.00 / total * 100 print(turn_over)
def xueqiu_login_url(): xueqiu_login_url = 'https://xueqiu.com/snowman/login' agent = 'Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0' headers = { 'Host': 'xueqiu.com', 'Referer': 'https://xueqiu.com/', 'Origin': 'https://xueqiu.com', 'User-Agent': agent } account = Toolkit.getUserData('data.cfg') data = { 'username': account['snowball_user'], 'password': account['snowball_password'] } s = session.post(xueqiu_login_url, data=data, headers=headers)
def send_139(): cfg = Toolkit.getUserData('data.cfg') sender = cfg['mail_user'] passwd = cfg['mail_pass'] receiver = cfg['receiver'] msg = MIMEText('Python mail test', 'plain', 'utf-8') msg['From'] = Header('FromTest', 'utf-8') msg['To'] = Header('ToTest', 'utf-8') subject = 'Python SMTP Test' msg['Subject'] = Header(subject, 'utf-8') try: obj = smtplib.SMTP() obj.connect('smtp.126.com', 25) obj.login(sender, passwd) obj.sendmail(sender, receiver, msg.as_string()) except smtplib.SMTPException, e: print(e)
def __init__(self, send=None): cfg = Toolkit.getUserData('data.cfg') self.public_key = cfg['public_key'] self.private_key = cfg['private_key'] self.send = send from_mail = cfg['from_mail'] password = cfg['password'] to_mail = cfg['to_mail'] smtp_server = 'smtp.qq.com' self.server = smtp_server self.username = from_mail.split("@")[0] self.from_mail = from_mail self.password = password self.to_mail = to_mail self.coin_list = [ 'IFC', 'DOGE', 'EAC', 'DNC', 'MET', 'ZET', 'SKT', 'YTC', 'PLC', 'LKC', 'JBC', 'MRYC', 'GOOC', 'QEC', 'PEB', 'XRP', 'NXT', 'WDC', 'MAX', 'ZCC', 'HLB', 'RSS', 'PGC', 'RIO', 'XAS', 'TFC', 'BLK', 'FZ', 'ANS', 'XPM', 'VTC', 'KTC', 'VRC', 'XSGS', 'LSK', 'PPC', 'ETC', 'GAME', 'LTC', 'ETH', 'BTC' ] # 初始化邮箱设置读取需要股票信息 # 这样子只登陆一次 if self.send == 'msn': try: self.smtp = smtplib.SMTP_SSL(port=465) self.smtp.connect(self.server) self.smtp.login(self.username, self.password) except smtplib.SMTPException as e: print(e) return 0 if send == 'wechat': self.w_name = 'wwwei' self.w_name1 = 'aiweichuangyi' itchat.auto_login(hotReload=True) account = itchat.get_friends(self.w_name) for i in account: if i['PYQuanPin'] == self.w_name: self.toName = i['UserName'] #print(self.toName) if i['PYQuanPin'] == self.w_name1: self.toName1 = i['UserName']
def pack(self, output): """ Pack the BOOT directory into the output image """ # Retrieve the last used tools from boot directory self.bootType = Toolkit.retrieveType(self.bootfile) # Check whether the tools exists if self.bootType == None: raise ValueError("Unknown boot image type.") # Execute the pack command packTool = self.TOOLKIT.getTools(self.bootType, "PACK") cmd = "%s %s %s" % (commands.mkarg(packTool), commands.mkarg( self.bootfile), commands.mkarg(output)) (status, result) = commands.getstatusoutput(cmd) if status != 0: print "Pack failed" print result else: print "Pack %s %s --> %s" % (self.bootType, self.bootfile, output)
def __init__(self): #self.base=ts.get_stock_basics() # print self.base # print self.base.index # 这里编码有问题 # self.bases.to_excel('bases.xls') # self.bases.to_excel('base.xls',encoding='GBK') # self.bases.to_excel('111.xls',encoding='utf8') #self.base.to_csv('bases.csv') # 因为网速问题,手动从本地抓取 # self.base=pd.read_csv('bases.csv',dtype={'code':np.str}) # print self.base # self.today=datetime.datetime.strftime('%Y-%m-%d') self.today = time.strftime("%Y-%m-%d", time.localtime()) self.base = pd.read_csv('bases.csv', dtype={'code': np.str}) self.all_code = self.base['code'].values self.working_count = 0 # all_code=self.base.index.values # print self.base self.mystocklist = Toolkit.read_stock('mystock.csv')
def record_factory(host, host_type, ports, url, port_kind='tcp'): l = [] for p in ports: i = Toolkit(host, p, url, port_kind) field = '{} {} {}'.format(port_kind, p, i.check_socket()) l.append(field) port_status = ', '.join(l) _output = i.check_host() _filter = _output.split('received, ')[1] # 0% packet loss, time 1606ms... ping_status = _filter[0:16].strip(', ') # 0% packet loss timestamp = datetime.today() dns_status = i.check_dns() url_status = i.check_url() return str(timestamp), host, host_type, ping_status, port_status, dns_status, url_status
def __init__(self): Toolkit.getUserData()
# -*-coding=utf-8-*- from toolkit import Toolkit from sqlalchemy import create_engine import redis import os import MySQLdb cfg_file = os.path.join(os.path.dirname(__file__), 'data.cfg') MYSQL_USER = Toolkit.getUserData(cfg_file)['MYSQL_USER'] MYSQL_REMOTE_USER = Toolkit.getUserData(cfg_file)['MYSQL_REMOTE_USER'] MYSQL_PASSWORD = Toolkit.getUserData(cfg_file)['MYSQL_PASSWORD'] MYSQL_HOST = Toolkit.getUserData(cfg_file)['MYSQL_HOST'] MYSQL_REMOTE = Toolkit.getUserData(cfg_file)['MYSQL_REMOTE'] MYSQL_PORT = Toolkit.getUserData(cfg_file)['MYSQL_PORT'] REDIS_HOST = 'localhost' EMAIL_USER = Toolkit.getUserData(cfg_file)['EMAIL_USER'] EMAIL_PASS = Toolkit.getUserData(cfg_file)['EMAIL_PASSWORD'] SMTP_HOST = Toolkit.getUserData(cfg_file)['SMTP_HOST'] FROM_MAIL = Toolkit.getUserData(cfg_file)['FROM_MAIL'] TO_MAIL = Toolkit.getUserData(cfg_file)['TO_MAIL'] def get_engine(db): engine = create_engine( 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, db)) return engine def get_mysql_conn(db):
def genListFromTrace(ftrace, fdict=""): stats = [] stat = {} count = 0 with open(ftrace) as f: for line in f: if "--" in line: """ to process the additional information """ if "addr" in line: stat['addr'] = line.split()[2] elif "not taken" in line: stat['taken'] = 0 elif "taken" in line: stat['taken'] = 1 elif "not executed" in line: stat['executed'] = 0 elif "executed" in line: stat['executed'] = 1 else: print "Error:", line else: """ else, it's the begin for a new instruction """ if stat.has_key('id'): stats.append(stat) stat = { 'lock': 0, 'rep': 0, 'op1': "", 'op2': "", 'op3': "", 'op1_mode': "", 'op2_mode': "", 'op3_mode': "", } """ split the string line into 3 parts """ stat['id'] = line[0:16] instrList = line[17:60].split() addrList = line[60:-1].split() """ for the instruction part """ if instrList[0] == "lock": stat['lock'] = 1 if instrList[0] == "rep": stat['rep'] = 1 """ Any Other Prefix? REPE, REPNE, REPZ, REPNZ ??? """ stat['instr'] = instrList[0 + stat['lock'] + stat['rep']] stat['nOPs'] = len( instrList) - 1 - stat['lock'] - stat['rep'] if stat['nOPs'] == 1: stat['op1'] = instrList[1 + stat['lock'] + stat['rep']] elif stat['nOPs'] == 2: stat['op1'] = instrList[1 + stat['lock'] + stat['rep']][0:-1] stat['op2'] = instrList[2 + stat['lock'] + stat['rep']] elif stat['nOPs'] == 3: stat['op1'] = instrList[1 + stat['lock'] + stat['rep']][0:-1] stat['op2'] = instrList[2 + stat['lock'] + stat['rep']][0:-1] stat['op3'] = instrList[3 + stat['lock'] + stat['rep']] elif stat['nOPs'] > 3: print line if stat['nOPs'] >= 1: stat['op1_mode'] = Addressing.checkMode(stat['op1']) if stat['nOPs'] >= 2: stat['op2_mode'] = Addressing.checkMode(stat['op2']) if stat['nOPs'] >= 3: stat['op3_mode'] = Addressing.checkMode(stat['op3']) """ for the binary representation part""" stat['nbytes'] = len(addrList) for i in range(0, len(addrList)): stat['byte' + str(i)] = addrList[i] if stat.has_key('id'): stats.append(stat) f.close() if len(fdict) > 0: Toolkit.writeJsonFile(fdict, stats) return stats
def __init__(self): self.mystock=Toolkit.read_stock('mystock.csv') self.base=pd.read_csv('bases.csv',dtype={'code': np.str})
from lxml import etree url='https://xueqiu.com/snowman/login' session = requests.session() session.cookies = cookielib.LWPCookieJar(filename="cookies") try: session.cookies.load(ignore_discard=True) except: print("Cookie can't load") agent = 'Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0' headers = {'Host': 'xueqiu.com', 'Referer': 'https://xueqiu.com/', 'Origin':'https://xueqiu.com', 'User-Agent': agent} account=Toolkit.getUserData('data.cfg') print(account['snowball_user']) print(account['snowball_password']) data={'username':account['snowball_user'],'password':account['snowball_password']} s=session.post(url,data=data,headers=headers) print(s.status_code) #print(s.text) session.cookies.save() fav_temp='https://xueqiu.com/favs?page=1' collection=session.get(fav_temp,headers=headers) fav_content= collection.text p=re.compile('"maxPage":(\d+)') maxPage=p.findall(fav_content)[0] #目前也只是第一页而已 print(maxPage)
# -*-coding=utf-8-*- from toolkit import Toolkit from sqlalchemy import create_engine import redis import os import MySQLdb cfg_file=os.path.join(os.path.dirname(__file__),'data.cfg') MYSQL_USER = Toolkit.getUserData(cfg_file)['MYSQL_USER'] MYSQL_REMOTE_USER = Toolkit.getUserData(cfg_file)['MYSQL_REMOTE_USER'] MYSQL_PASSWORD = Toolkit.getUserData(cfg_file)['MYSQL_PASSWORD'] MYSQL_HOST = Toolkit.getUserData(cfg_file)['MYSQL_HOST'] MYSQL_REMOTE = Toolkit.getUserData(cfg_file)['MYSQL_REMOTE'] MYSQL_PORT = Toolkit.getUserData(cfg_file)['MYSQL_PORT'] REDIS_HOST='localhost' EMAIL_USER = Toolkit.getUserData(cfg_file)['EMAIL_USER'] EMAIL_PASS = Toolkit.getUserData(cfg_file)['EMAIL_PASSWORD'] SMTP_HOST = Toolkit.getUserData(cfg_file)['SMTP_HOST'] FROM_MAIL = Toolkit.getUserData(cfg_file)['FROM_MAIL'] TO_MAIL = Toolkit.getUserData(cfg_file)['TO_MAIL'] def get_engine(db): engine = create_engine('mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, db)) return engine def get_mysql_conn(db): conn = MySQLdb.connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWORD,db,charset='utf8') return conn
# Importing regex4dummies from regex4dummies import regex4dummies from toolkit import Toolkit from tests import MainTests # Running tests tester = MainTests() tester.run_tests(regex4dummies(), Toolkit())
def __init__(self): self.mystock = Toolkit.read_stock('mystock.csv') self.base = pd.read_csv('bases.csv', dtype={'code': np.str})
# -*-coding=utf-8-*- from toolkit import Toolkit from sqlalchemy import create_engine import redis import MySQLdb MYSQL_USER = Toolkit.getUserData('data.cfg')['MYSQL_USER'] MYSQL_PASSWORD = Toolkit.getUserData('data.cfg')['MYSQL_PASSWORD'] MYSQL_HOST = Toolkit.getUserData('data.cfg')['MYSQL_HOST'] MYSQL_PORT = Toolkit.getUserData('data.cfg')['MYSQL_PORT'] REDIS_HOST = 'localhost' def get_engine(db): engine = create_engine( 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, db)) return engine def get_mysql_conn(db): conn = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, db, charset='utf8') return conn