python对多个数据库执行mysql的source命令
博客专区 > 枯藤KT 的博客 > 博客详情
python对多个数据库执行mysql的source命令
枯藤KT 发表于3年前
python对多个数据库执行mysql的source命令
  • 发表于 3年前
  • 阅读 86
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 有很多个数据库,需对每一个数据库进行source sql.txt 操作
#!/usr/bin/env python
import mysql
from mysql import connector
import time
import os
def dowork():
    sql_db=("show databases")
    cursora=conn.cursor()
    cursora.execute(sql_db)
    
    cursorb=conn.cursor()
    dbs=[]
    for db in cursora:
        conn.database=db
        cursorb.execute("show tables")
        for table in cursorb:
            if 'goods_moves' in table:
                dbs.append(db)
    cursora.close()
    cursorb.close()
    return dbs
#把文件中的sql语句存入字典中,然后每个数据库顺序执行
def get_sql():
    fp=file("update.sql",'r')
    sql={}
    count=1
    str_sql=str()
    for line in fp.readlines():
        if line.strip().startswith('/*'):continue
        if line.strip().endswith(";"):
            sql[count]=str_sql+line
            str_sql=''
            count=count+1
        else:
            str_sql=str_sql+line
    fp.close()
    return sql
def modify_table(dbs,sql):
    cursora=conn.cursor()
    for db in dbs:
        conn.database=db
        try:
            for k,v in sql.iteritems():
                cursora.execute(v)
        except Exception:
            bad.append(db[0])
        else:
                print db[0],time.strftime("%k:%M:%S")
        conn.commit()
    cursora.close()
def writeDbToFile(dbs,output):
    dbfile=file(output,'w')
    for db in dbs:
        dbfile.write(db[0]+os.linesep)
        dbfile.flush()
    dbfile.close()
def checkSql(sql):
    for k,v in sql.iteritems():
        print k,v
if __name__ == '__main__':
    config={
        'user':"root",
        'password':'1234456',
        'host':'192.168.10.1',
        'port':13306,
        'buffered':True
    }
    bad=[]
    err=file("error.log",'w')
    conn=mysql.connector.connect(**config)
    dbs=dowork()
    writeDbToFile(dbs,config["host"]+".dbs.txt")
    sql=get_sql()
    #checkSql(sql)
    modify_table(dbs,sql)
    err.write(os.linesep.join(bad))
    err.close()
    conn.close()
共有 人打赏支持
枯藤KT
粉丝 4
博文 71
码字总数 60123
×
枯藤KT
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: